[
  {
    "path": ".idea/OnlineSchoolShop.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\" />\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n  </component>\n</module>"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"true\" />\n      <profile name=\"Maven default annotation processors profile\" enabled=\"true\">\n        <sourceOutputDir name=\"target/generated-sources/annotations\" />\n        <sourceTestOutputDir name=\"target/generated-test-sources/test-annotations\" />\n        <outputRelativeToContentRoot value=\"true\" />\n        <module name=\"SpringbootSchoolShop\" />\n      </profile>\n    </annotationProcessing>\n    <bytecodeTargetLevel>\n      <module name=\"SpringbootSchoolShop\" target=\"1.8\" />\n    </bytecodeTargetLevel>\n  </component>\n  <component name=\"JavacSettings\">\n    <option name=\"ADDITIONAL_OPTIONS_OVERRIDE\">\n      <module name=\"SpringbootSchoolShop\" options=\"-parameters\" />\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/dataSources.local.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"dataSourceStorageLocal\">\n    <data-source name=\"@localhost\" uuid=\"70c4822e-38a3-43cd-ac31-65f6acae3115\">\n      <database-info product=\"\" version=\"\" jdbc-version=\"\" driver-name=\"\" driver-version=\"\" dbms=\"MYSQL\" exact-version=\"0\" />\n      <secret-storage>master_key</secret-storage>\n      <user-name>root</user-name>\n    </data-source>\n  </component>\n</project>"
  },
  {
    "path": ".idea/dataSources.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"DataSourceManagerImpl\" format=\"xml\" multifile-model=\"true\">\n    <data-source source=\"LOCAL\" name=\"@localhost\" uuid=\"70c4822e-38a3-43cd-ac31-65f6acae3115\">\n      <driver-ref>mysql.8</driver-ref>\n      <synchronize>true</synchronize>\n      <jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>\n      <jdbc-url>jdbc:mysql://localhost:3306</jdbc-url>\n      <driver-properties>\n        <property name=\"autoReconnect\" value=\"true\" />\n        <property name=\"zeroDateTimeBehavior\" value=\"CONVERT_TO_NULL\" />\n        <property name=\"tinyInt1isBit\" value=\"false\" />\n        <property name=\"characterEncoding\" value=\"utf8\" />\n        <property name=\"characterSetResults\" value=\"utf8\" />\n        <property name=\"yearIsDateType\" value=\"false\" />\n      </driver-properties>\n    </data-source>\n  </component>\n</project>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"file://$PROJECT_DIR$/SpringbootSchoolShop\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/inspectionProfiles/Project_Default.xml",
    "content": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project Default\" />\n    <inspection_tool class=\"Duplicates\" enabled=\"true\" level=\"WEAK WARNING\" enabled_by_default=\"true\">\n      <Java>\n        <minSize>58</minSize>\n        <isEnabled>true</isEnabled>\n      </Java>\n    </inspection_tool>\n    <inspection_tool class=\"SpringJavaInjectionPointsAutowiringInspection\" enabled=\"false\" level=\"ERROR\" enabled_by_default=\"false\" />\n  </profile>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__c3p0_c3p0_0_9_1_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: c3p0:c3p0:0.9.1.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: ch.qos.logback:logback-classic:1.2.3\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: ch.qos.logback:logback-core:1.2.3\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_alibaba_fastjson_1_2_28.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.alibaba:fastjson:1.2.28\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/alibaba/fastjson/1.2.28/fastjson-1.2.28.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/alibaba/fastjson/1.2.28/fastjson-1.2.28-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/alibaba/fastjson/1.2.28/fastjson-1.2.28-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml:classmate:1.4.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.4.0/classmate-1.4.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.4.0/classmate-1.4.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.4.0/classmate-1.4.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_8.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml.jackson.core:jackson-core:2.9.8\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.8/jackson-core-2.9.8.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.8/jackson-core-2.9.8-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.8/jackson-core-2.9.8-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_10_7.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml.jackson.core:jackson-databind:2.9.10.7\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.10.7/jackson-databind-2.9.10.7.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.10.7/jackson-databind-2.9.10.7-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.10.7/jackson-databind-2.9.10.7-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_8.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.8/jackson-datatype-jdk8-2.9.8.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.8/jackson-datatype-jdk8-2.9.8-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.8/jackson-datatype-jdk8-2.9.8-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_8.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.8/jackson-datatype-jsr310-2.9.8.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.8/jackson-datatype-jsr310-2.9.8-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.8/jackson-datatype-jsr310-2.9.8-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_8.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.8/jackson-module-parameter-names-2.9.8.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.8/jackson-module-parameter-names-2.9.8-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.8/jackson-module-parameter-names-2.9.8-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_github_jsqlparser_jsqlparser_1_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.github.jsqlparser:jsqlparser:1.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/jsqlparser/jsqlparser/1.0/jsqlparser-1.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/jsqlparser/jsqlparser/1.0/jsqlparser-1.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/jsqlparser/jsqlparser/1.0/jsqlparser-1.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_github_pagehelper_pagehelper_5_1_4.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.github.pagehelper:pagehelper:5.1.4\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper/5.1.4/pagehelper-5.1.4.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper/5.1.4/pagehelper-5.1.4-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper/5.1.4/pagehelper-5.1.4-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_2_5.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.5\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper-spring-boot-autoconfigure/1.2.5/pagehelper-spring-boot-autoconfigure-1.2.5.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper-spring-boot-autoconfigure/1.2.5/pagehelper-spring-boot-autoconfigure-1.2.5-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper-spring-boot-autoconfigure/1.2.5/pagehelper-spring-boot-autoconfigure-1.2.5-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_2_5.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.5\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper-spring-boot-starter/1.2.5/pagehelper-spring-boot-starter-1.2.5.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper-spring-boot-starter/1.2.5/pagehelper-spring-boot-starter-1.2.5-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper-spring-boot-starter/1.2.5/pagehelper-spring-boot-starter-1.2.5-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_github_virtuald_curvesapi_1_03.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.github.virtuald:curvesapi:1.03\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.03/curvesapi-1.03.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.03/curvesapi-1.03-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.03/curvesapi-1.03-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_github_xiaoymin_swagger_bootstrap_ui_1_6.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.github.xiaoymin:swagger-bootstrap-ui:1.6\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/xiaoymin/swagger-bootstrap-ui/1.6/swagger-bootstrap-ui-1.6.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/xiaoymin/swagger-bootstrap-ui/1.6/swagger-bootstrap-ui-1.6-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/github/xiaoymin/swagger-bootstrap-ui/1.6/swagger-bootstrap-ui-1.6-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_google_guava_guava_18_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.google.guava:guava:18.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/google/guava/guava/18.0/guava-18.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/google/guava/guava/18.0/guava-18.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/google/guava/guava/18.0/guava-18.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.jayway.jsonpath:json-path:2.4.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_sun_mail_javax_mail_1_6_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.sun.mail:javax.mail:1.6.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__com_zaxxer_HikariCP_3_2_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: com.zaxxer:HikariCP:3.2.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.2.0/HikariCP-3.2.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.2.0/HikariCP-3.2.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.2.0/HikariCP-3.2.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__commons_codec_commons_codec_1_11.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: commons-codec:commons-codec:1.11\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: commons-fileupload:commons-fileupload:1.3.3\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__commons_io_commons_io_2_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: commons-io:commons-io:2.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.2/commons-io-2.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.2/commons-io-2.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.2/commons-io-2.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_core_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-core:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-core/2.7.0/springfox-core-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-core/2.7.0/springfox-core-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-core/2.7.0/springfox-core-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_schema_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-schema:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-schema/2.7.0/springfox-schema-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-schema/2.7.0/springfox-schema-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-schema/2.7.0/springfox-schema-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_spi_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-spi:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spi/2.7.0/springfox-spi-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spi/2.7.0/springfox-spi-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spi/2.7.0/springfox-spi-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_spring_web_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-spring-web:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spring-web/2.7.0/springfox-spring-web-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spring-web/2.7.0/springfox-spring-web-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spring-web/2.7.0/springfox-spring-web-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_swagger2_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-swagger2:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger2/2.7.0/springfox-swagger2-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger2/2.7.0/springfox-swagger2-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger2/2.7.0/springfox-swagger2-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_swagger_common_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-swagger-common:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-common/2.7.0/springfox-swagger-common-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-common/2.7.0/springfox-swagger-common-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-common/2.7.0/springfox-swagger-common-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_7_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.springfox:springfox-swagger-ui:2.7.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_swagger_swagger_annotations_1_5_13.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.swagger:swagger-annotations:1.5.13\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/swagger/swagger-annotations/1.5.13/swagger-annotations-1.5.13.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/swagger/swagger-annotations/1.5.13/swagger-annotations-1.5.13-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/swagger/swagger-annotations/1.5.13/swagger-annotations-1.5.13-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__io_swagger_swagger_models_1_5_13.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: io.swagger:swagger-models:1.5.13\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/swagger/swagger-models/1.5.13/swagger-models-1.5.13.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/swagger/swagger-models/1.5.13/swagger-models-1.5.13-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/io/swagger/swagger-models/1.5.13/swagger-models-1.5.13-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__javax_activation_activation_1_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: javax.activation:activation:1.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/activation/activation/1.1/activation-1.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/activation/activation/1.1/activation-1.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/activation/activation/1.1/activation-1.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: javax.annotation:javax.annotation-api:1.3.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: javax.servlet:javax.servlet-api:4.0.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__javax_servlet_jstl_1_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: javax.servlet:jstl:1.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/servlet/jstl/1.2/jstl-1.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/servlet/jstl/1.2/jstl-1.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/servlet/jstl/1.2/jstl-1.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: javax.validation:validation-api:2.0.1.Final\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__junit_junit_4_12.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: junit:junit:4.12\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__mysql_mysql_connector_java_8_0_15.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: mysql:mysql-connector-java:8.0.15\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_12.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: net.bytebuddy:byte-buddy:1.9.12\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.9.12/byte-buddy-1.9.12.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.9.12/byte-buddy-1.9.12-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.9.12/byte-buddy-1.9.12-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_12.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: net.bytebuddy:byte-buddy-agent:1.9.12\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.9.12/byte-buddy-agent-1.9.12.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.9.12/byte-buddy-agent-1.9.12-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.9.12/byte-buddy-agent-1.9.12-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: net.minidev:accessors-smart:1.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__net_minidev_json_smart_2_3.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: net.minidev:json-smart:2.3\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.commons:commons-collections4:4.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.logging.log4j:log4j-api:2.11.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_poi_poi_3_17.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.poi:poi:3.17\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.17/poi-3.17.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.17/poi-3.17-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.17/poi-3.17-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_poi_poi_ooxml_3_14.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.poi:poi-ooxml:3.14\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/3.14/poi-ooxml-3.14.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/3.14/poi-ooxml-3.14-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/3.14/poi-ooxml-3.14-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_14.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.poi:poi-ooxml-schemas:3.14\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml-schemas/3.14/poi-ooxml-schemas-3.14.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml-schemas/3.14/poi-ooxml-schemas-3.14-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml-schemas/3.14/poi-ooxml-schemas-3.14-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_17.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.17\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.17/tomcat-embed-core-9.0.17.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.17/tomcat-embed-core-9.0.17-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.17/tomcat-embed-core-9.0.17-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_17.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.17\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.17/tomcat-embed-el-9.0.17.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.17/tomcat-embed-el-9.0.17-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.17/tomcat-embed-el-9.0.17-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_9_0_17.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.tomcat.embed:tomcat-embed-jasper:9.0.17\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-jasper/9.0.17/tomcat-embed-jasper-9.0.17.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-jasper/9.0.17/tomcat-embed-jasper-9.0.17-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-jasper/9.0.17/tomcat-embed-jasper-9.0.17-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_17.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.17\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.17/tomcat-embed-websocket-9.0.17.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.17/tomcat-embed-websocket-9.0.17-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.17/tomcat-embed-websocket-9.0.17-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.apache.xmlbeans:xmlbeans:2.6.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.assertj:assertj-core:3.11.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.11.1/assertj-core-3.11.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.11.1/assertj-core-3.11.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.11.1/assertj-core-3.11.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_eclipse_jdt_ecj_3_15_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.eclipse.jdt:ecj:3.15.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/eclipse/jdt/ecj/3.15.0/ecj-3.15.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/eclipse/jdt/ecj/3.15.0/ecj-3.15.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/eclipse/jdt/ecj/3.15.0/ecj-3.15.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.hamcrest:hamcrest-core:1.3\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.hamcrest:hamcrest-library:1.3\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_16_Final.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.16.Final/hibernate-validator-6.0.16.Final.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.16.Final/hibernate-validator-6.0.16.Final-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.16.Final/hibernate-validator-6.0.16.Final-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.javassist:javassist:3.21.0-GA\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.jboss.logging:jboss-logging:3.3.2.Final\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mapstruct_mapstruct_1_1_0_Final.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mapstruct:mapstruct:1.1.0.Final\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.1.0.Final/mapstruct-1.1.0.Final.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.1.0.Final/mapstruct-1.1.0.Final-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.1.0.Final/mapstruct-1.1.0.Final-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mockito:mockito-core:2.23.4\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/2.23.4/mockito-core-2.23.4.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/2.23.4/mockito-core-2.23.4-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/2.23.4/mockito-core-2.23.4-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mybatis_generator_mybatis_generator_core_1_3_5.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mybatis.generator:mybatis-generator-core:1.3.5\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/generator/mybatis-generator-core/1.3.5/mybatis-generator-core-1.3.5.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/generator/mybatis-generator-core/1.3.5/mybatis-generator-core-1.3.5-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/generator/mybatis-generator-core/1.3.5/mybatis-generator-core-1.3.5-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mybatis_mybatis_3_4_5.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mybatis:mybatis:3.4.5\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.4.5/mybatis-3.4.5.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.4.5/mybatis-3.4.5-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.4.5/mybatis-3.4.5-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mybatis_mybatis_spring_1_3_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mybatis:mybatis-spring:1.3.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/1.3.1/mybatis-spring-1.3.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/1.3.1/mybatis-spring-1.3.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/1.3.1/mybatis-spring-1.3.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_1_3_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/spring/boot/mybatis-spring-boot-autoconfigure/1.3.1/mybatis-spring-boot-autoconfigure-1.3.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/spring/boot/mybatis-spring-boot-autoconfigure/1.3.1/mybatis-spring-boot-autoconfigure-1.3.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/spring/boot/mybatis-spring-boot-autoconfigure/1.3.1/mybatis-spring-boot-autoconfigure-1.3.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_1_3_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/spring/boot/mybatis-spring-boot-starter/1.3.1/mybatis-spring-boot-starter-1.3.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/spring/boot/mybatis-spring-boot-starter/1.3.1/mybatis-spring-boot-starter-1.3.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/mybatis/spring/boot/mybatis-spring-boot-starter/1.3.1/mybatis-spring-boot-starter-1.3.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_objenesis_objenesis_2_6.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.objenesis:objenesis:2.6\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/2.6/objenesis-2.6.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/2.6/objenesis-2.6-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/2.6/objenesis-2.6-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.ow2.asm:asm:5.0.4\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_projectlombok_lombok_1_18_6.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.projectlombok:lombok:1.18.6\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.6/lombok-1.18.6.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.6/lombok-1.18.6-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.6/lombok-1.18.6-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_reflections_reflections_0_9_11.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.reflections:reflections:0.9.11\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/reflections/reflections/0.9.11/reflections-0.9.11.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/reflections/reflections/0.9.11/reflections-0.9.11-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/reflections/reflections/0.9.11/reflections-0.9.11-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.skyscreamer:jsonassert:1.5.0\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_26.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.slf4j:jul-to-slf4j:1.7.26\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.slf4j:slf4j-api:1.7.30\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.1.4.RELEASE/spring-boot-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.1.4.RELEASE/spring-boot-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.1.4.RELEASE/spring-boot-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.1.4.RELEASE/spring-boot-autoconfigure-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.1.4.RELEASE/spring-boot-autoconfigure-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.1.4.RELEASE/spring-boot-autoconfigure-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_devtools_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-devtools:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-devtools/2.1.4.RELEASE/spring-boot-devtools-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-devtools/2.1.4.RELEASE/spring-boot-devtools-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-devtools/2.1.4.RELEASE/spring-boot-devtools-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.1.4.RELEASE/spring-boot-starter-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.1.4.RELEASE/spring-boot-starter-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.1.4.RELEASE/spring-boot-starter-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.1.4.RELEASE/spring-boot-starter-jdbc-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.1.4.RELEASE/spring-boot-starter-jdbc-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.1.4.RELEASE/spring-boot-starter-jdbc-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-json:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.1.4.RELEASE/spring-boot-starter-json-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.1.4.RELEASE/spring-boot-starter-json-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.1.4.RELEASE/spring-boot-starter-json-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-logging:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.1.4.RELEASE/spring-boot-starter-logging-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.1.4.RELEASE/spring-boot-starter-logging-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.1.4.RELEASE/spring-boot-starter-logging-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_mail_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-mail:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-mail/2.1.4.RELEASE/spring-boot-starter-mail-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-mail/2.1.4.RELEASE/spring-boot-starter-mail-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-mail/2.1.4.RELEASE/spring-boot-starter-mail-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-test:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.1.4.RELEASE/spring-boot-starter-test-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.1.4.RELEASE/spring-boot-starter-test-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.1.4.RELEASE/spring-boot-starter-test-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.1.4.RELEASE/spring-boot-starter-tomcat-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.1.4.RELEASE/spring-boot-starter-tomcat-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.1.4.RELEASE/spring-boot-starter-tomcat-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-starter-web:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.1.4.RELEASE/spring-boot-starter-web-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.1.4.RELEASE/spring-boot-starter-web-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.1.4.RELEASE/spring-boot-starter-web-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-test:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.1.4.RELEASE/spring-boot-test-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.1.4.RELEASE/spring-boot-test-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.1.4.RELEASE/spring-boot-test-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_4_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.4.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.1.4.RELEASE/spring-boot-test-autoconfigure-2.1.4.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.1.4.RELEASE/spring-boot-test-autoconfigure-2.1.4.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.1.4.RELEASE/spring-boot-test-autoconfigure-2.1.4.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_aop_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-aop:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.1.6.RELEASE/spring-aop-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.1.6.RELEASE/spring-aop-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.1.6.RELEASE/spring-aop-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-beans:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_context_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-context:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.1.6.RELEASE/spring-context-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.1.6.RELEASE/spring-context-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.1.6.RELEASE/spring-context-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_context_support_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-context-support:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.6.RELEASE/spring-context-support-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.6.RELEASE/spring-context-support-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.6.RELEASE/spring-context-support-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_core_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-core:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.1.6.RELEASE/spring-core-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.1.6.RELEASE/spring-core-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.1.6.RELEASE/spring-core-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-expression:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.1.6.RELEASE/spring-expression-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.1.6.RELEASE/spring-expression-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.1.6.RELEASE/spring-expression-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_jcl_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-jcl:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.1.6.RELEASE/spring-jcl-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.1.6.RELEASE/spring-jcl-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.1.6.RELEASE/spring-jcl-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_jdbc_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-jdbc:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.1.6.RELEASE/spring-jdbc-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.1.6.RELEASE/spring-jdbc-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.1.6.RELEASE/spring-jdbc-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_test_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-test:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.1.6.RELEASE/spring-test-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.1.6.RELEASE/spring-test-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.1.6.RELEASE/spring-test-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_tx_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-tx:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.1.6.RELEASE/spring-tx-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.1.6.RELEASE/spring-tx-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.1.6.RELEASE/spring-tx-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_web_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-web:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.6.RELEASE/spring-web-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.6.RELEASE/spring-web-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.6.RELEASE/spring-web-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_springframework_spring_webmvc_5_1_6_RELEASE.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.springframework:spring-webmvc:5.1.6.RELEASE\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.1.6.RELEASE/spring-webmvc-5.1.6.RELEASE.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.1.6.RELEASE/spring-webmvc-5.1.6.RELEASE-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.1.6.RELEASE/spring-webmvc-5.1.6.RELEASE-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_2.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.xmlunit:xmlunit-core:2.6.2\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.6.2/xmlunit-core-2.6.2.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.6.2/xmlunit-core-2.6.2-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.6.2/xmlunit-core-2.6.2-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: org.yaml:snakeyaml:1.23\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.23/snakeyaml-1.23-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.23/snakeyaml-1.23-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Maven__stax_stax_api_1_0_1.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Maven: stax:stax-api:1.0.1\">\n    <CLASSES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/stax/stax-api/1.0.1/stax-api-1.0.1.jar!/\" />\n    </CLASSES>\n    <JAVADOC>\n      <root url=\"jar://$MAVEN_REPOSITORY$/stax/stax-api/1.0.1/stax-api-1.0.1-javadoc.jar!/\" />\n    </JAVADOC>\n    <SOURCES>\n      <root url=\"jar://$MAVEN_REPOSITORY$/stax/stax-api/1.0.1/stax-api-1.0.1-sources.jar!/\" />\n    </SOURCES>\n  </library>\n</component>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"JavaScriptSettings\">\n    <option name=\"languageLevel\" value=\"ES6\" />\n  </component>\n  <component name=\"MavenProjectsManager\">\n    <option name=\"originalFiles\">\n      <list>\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/pom.xml\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\" />\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/.idea/OnlineSchoolShop.iml\" filepath=\"$PROJECT_DIR$/.idea/OnlineSchoolShop.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/SpringbootSchoolShop/SpringbootSchoolShop.iml\" filepath=\"$PROJECT_DIR$/SpringbootSchoolShop/SpringbootSchoolShop.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"b183929f-2082-485b-85c9-f94d406b2a7f\" name=\"Default Changelist\" comment=\"修改md文件\">\n      <change afterPath=\"$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/workspace.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/workspace.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/README.md\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/README.md\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ExcelUtils.java\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ExcelUtils.java\" afterDir=\"false\" />\n    </list>\n    <ignored path=\"$PROJECT_DIR$/SpringbootSchoolShop/target/\" />\n    <option name=\"EXCLUDED_CONVERTED_TO_IGNORED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"DatabaseView\">\n    <option name=\"SHOW_INTERMEDIATE\" value=\"true\" />\n    <option name=\"GROUP_DATA_SOURCES\" value=\"true\" />\n    <option name=\"GROUP_SCHEMA\" value=\"true\" />\n    <option name=\"GROUP_CONTENTS\" value=\"false\" />\n    <option name=\"SORT_POSITIONED\" value=\"false\" />\n    <option name=\"SHOW_EMPTY_GROUPS\" value=\"false\" />\n    <option name=\"AUTO_SCROLL_FROM_SOURCE\" value=\"false\" />\n    <option name=\"HIDDEN_KINDS\">\n      <set />\n    </option>\n    <expand />\n    <select />\n  </component>\n  <component name=\"DefaultGradleProjectSettings\">\n    <option name=\"isMigrated\" value=\"true\" />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf SIDE_TABS_SIZE_LIMIT_KEY=\"300\">\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/shopcart.jsp\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\" />\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/addGoods.jsp\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"532\">\n              <caret line=\"28\" selection-start-line=\"28\" selection-end-line=\"28\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/ActivityController.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"-779\">\n              <caret line=\"26\" column=\"13\" selection-start-line=\"26\" selection-start-column=\"13\" selection-end-line=\"26\" selection-end-column=\"13\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/README.md\">\n          <provider selected=\"true\" editor-type-id=\"split-provider[text-editor;markdown-preview-editor]\">\n            <state split_layout=\"SPLIT\">\n              <first_editor relative-caret-position=\"395\">\n                <caret line=\"119\" column=\"44\" selection-start-line=\"119\" selection-start-column=\"44\" selection-end-line=\"119\" selection-end-column=\"44\" />\n              </first_editor>\n              <second_editor />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminAllGoods.jsp\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\" />\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"FileTemplateManagerImpl\">\n    <option name=\"RECENT_TEMPLATES\">\n      <list>\n        <option value=\"Class\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"FindInProjectRecents\">\n    <findStrings>\n      <find>linux</find>\n      <find>D:/upload</find>\n      <find>/usr/upload</find>\n      <find>os.toLowerCase().startsWith(&quot;linux&quot;)</find>\n      <find>windows</find>\n      <find>poi</find>\n      <find>BORDER_THIN</find>\n      <find>getRecordByTxt</find>\n      <find>HSSFCellStyle</find>\n      <find>D:/upload/</find>\n      <find>os.toLowerCase().startsWith</find>\n      <find>os.toLowerCase().startsWith(&quot;</find>\n      <find>emailService</find>\n    </findStrings>\n  </component>\n  <component name=\"Git.Settings\">\n    <option name=\"RECENT_GIT_ROOT_PATH\" value=\"$PROJECT_DIR$\" />\n  </component>\n  <component name=\"IdeDocumentHistory\">\n    <option name=\"CHANGED_PATHS\">\n      <list>\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/Swagger2.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/AdminOrderController.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/GoodsController.java\" />\n        <option value=\"$PROJECT_DIR$/ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/util/ImageUtil.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/config/WebMvcConfig.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ImageUtil.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/EmailUtil.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/SpringbootSchoolShopApplication.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ExcelUtils.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/resources/application.yml\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/EmailServiceImpl.java\" />\n        <option value=\"$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/OrderController.java\" />\n        <option value=\"$PROJECT_DIR$/README.md\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"MavenImportPreferences\">\n    <option name=\"generalSettings\">\n      <MavenGeneralSettings>\n        <option name=\"localRepository\" value=\"D:\\codingRepository\\mavenRepository\" />\n        <option name=\"mavenHome\" value=\"D:/codingInstall/apache-maven-3.6.1-bin/apache-maven-3.6.1\" />\n        <option name=\"userSettingsFile\" value=\"D:\\codingInstall\\apache-maven-3.6.1-bin\\apache-maven-3.6.1\\conf\\settings.xml\" />\n        <option name=\"workOffline\" value=\"true\" />\n      </MavenGeneralSettings>\n    </option>\n    <option name=\"importingSettings\">\n      <MavenImportingSettings>\n        <option name=\"importAutomatically\" value=\"true\" />\n      </MavenImportingSettings>\n    </option>\n  </component>\n  <component name=\"MavenProjectNavigator\">\n    <treeState>\n      <expand>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"SpringbootSchoolShop\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n        </path>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"SpringbootSchoolShop\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n          <item name=\"Lifecycle\" type=\"58874e2:MavenProjectsStructure$LifecycleNode\" />\n        </path>\n      </expand>\n      <select />\n    </treeState>\n  </component>\n  <component name=\"ProjectFrameBounds\" extendedState=\"6\">\n    <option name=\"x\" value=\"300\" />\n    <option name=\"y\" value=\"270\" />\n    <option name=\"width\" value=\"1385\" />\n    <option name=\"height\" value=\"745\" />\n  </component>\n  <component name=\"ProjectLevelVcsManager\">\n    <ConfirmationsSetting value=\"2\" id=\"Add\" />\n  </component>\n  <component name=\"ProjectView\">\n    <navigator proportions=\"\" version=\"1\">\n      <foldersAlwaysOnTop value=\"true\" />\n    </navigator>\n    <panes>\n      <pane id=\"PackagesPane\" />\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <expand>\n            <path>\n              <item name=\"OnlineSchoolShop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"OnlineSchoolShop\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n          </expand>\n          <select />\n        </subPane>\n      </pane>\n      <pane id=\"Scope\" />\n      <pane id=\"CatdeaLogs\" />\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"ASKED_SHARE_PROJECT_CONFIGURATION_FILES\" value=\"true\" />\n    <property name=\"DatabaseDriversLRU\" value=\"mysql\" />\n    <property name=\"RequestMappingsPanelOrder0\" value=\"0\" />\n    <property name=\"RequestMappingsPanelOrder1\" value=\"1\" />\n    <property name=\"RequestMappingsPanelWidth0\" value=\"75\" />\n    <property name=\"RequestMappingsPanelWidth1\" value=\"75\" />\n    <property name=\"SHARE_PROJECT_CONFIGURATION_FILES\" value=\"true\" />\n    <property name=\"WebServerToolWindowFactoryState\" value=\"false\" />\n    <property name=\"aspect.path.notification.shown\" value=\"true\" />\n    <property name=\"last_opened_file_path\" value=\"$PROJECT_DIR$\" />\n    <property name=\"node.js.detected.package.eslint\" value=\"true\" />\n    <property name=\"node.js.detected.package.tslint\" value=\"true\" />\n    <property name=\"node.js.path.for.package.eslint\" value=\"project\" />\n    <property name=\"node.js.path.for.package.tslint\" value=\"project\" />\n    <property name=\"node.js.selected.package.eslint\" value=\"(autodetect)\" />\n    <property name=\"node.js.selected.package.tslint\" value=\"(autodetect)\" />\n    <property name=\"nodejs_interpreter_path.stuck_in_default_project\" value=\"undefined stuck path\" />\n    <property name=\"nodejs_npm_path_reset_for_default_project\" value=\"true\" />\n    <property name=\"project.structure.last.edited\" value=\"Modules\" />\n    <property name=\"project.structure.proportion\" value=\"0.0\" />\n    <property name=\"project.structure.side.proportion\" value=\"0.2\" />\n    <property name=\"settings.editor.selected.configurable\" value=\"MavenSettings\" />\n  </component>\n  <component name=\"RebelAgentSelection\">\n    <selection>jr</selection>\n  </component>\n  <component name=\"RecentsManager\">\n    <key name=\"CopyClassDialog.RECENTS_KEY\">\n      <recent name=\"com.zhang.ssmschoolshop\" />\n    </key>\n  </component>\n  <component name=\"RunDashboard\">\n    <option name=\"ruleStates\">\n      <list>\n        <RuleState>\n          <option name=\"name\" value=\"ConfigurationTypeDashboardGroupingRule\" />\n        </RuleState>\n        <RuleState>\n          <option name=\"name\" value=\"StatusDashboardGroupingRule\" />\n        </RuleState>\n      </list>\n    </option>\n  </component>\n  <component name=\"RunManager\">\n    <configuration name=\"SpringbootSchoolShopApplication\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\" temporary=\"true\" nameIsGenerated=\"true\">\n      <module name=\"SpringbootSchoolShop\" />\n      <extension name=\"coverage\">\n        <pattern>\n          <option name=\"PATTERN\" value=\"com.zhang.ssmschoolshop.*\" />\n          <option name=\"ENABLED\" value=\"true\" />\n        </pattern>\n      </extension>\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.zhang.ssmschoolshop.SpringbootSchoolShopApplication\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <recent_temporary>\n      <list>\n        <item itemvalue=\"Spring Boot.SpringbootSchoolShopApplication\" />\n      </list>\n    </recent_temporary>\n  </component>\n  <component name=\"SvnConfiguration\">\n    <configuration />\n  </component>\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"b183929f-2082-485b-85c9-f94d406b2a7f\" name=\"Default Changelist\" comment=\"\" />\n      <created>1627096897549</created>\n      <option name=\"number\" value=\"Default\" />\n      <option name=\"presentableId\" value=\"Default\" />\n      <updated>1627096897549</updated>\n      <workItem from=\"1627096898868\" duration=\"616000\" />\n      <workItem from=\"1627104853715\" duration=\"989000\" />\n      <workItem from=\"1627118130692\" duration=\"110000\" />\n      <workItem from=\"1640260842660\" duration=\"2618000\" />\n      <workItem from=\"1640483124417\" duration=\"1199000\" />\n      <workItem from=\"1640691818074\" duration=\"509000\" />\n      <workItem from=\"1645099127373\" duration=\"2313000\" />\n      <workItem from=\"1645185015618\" duration=\"510000\" />\n      <workItem from=\"1645322721560\" duration=\"1463000\" />\n      <workItem from=\"1645360239017\" duration=\"691000\" />\n    </task>\n    <task id=\"LOCAL-00001\" summary=\"V1.2增加新功能特性\">\n      <created>1627105452192</created>\n      <option name=\"number\" value=\"00001\" />\n      <option name=\"presentableId\" value=\"LOCAL-00001\" />\n      <option name=\"project\" value=\"LOCAL\" />\n      <updated>1627105452192</updated>\n    </task>\n    <task id=\"LOCAL-00002\" summary=\"修改md文件\">\n      <created>1627105626945</created>\n      <option name=\"number\" value=\"00002\" />\n      <option name=\"presentableId\" value=\"LOCAL-00002\" />\n      <option name=\"project\" value=\"LOCAL\" />\n      <updated>1627105626945</updated>\n    </task>\n    <option name=\"localTasksCounter\" value=\"3\" />\n    <servers />\n  </component>\n  <component name=\"TimeTrackingManager\">\n    <option name=\"totallyTimeSpent\" value=\"11018000\" />\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"-7\" y=\"-7\" width=\"1550\" height=\"838\" extended-state=\"6\" />\n    <editor active=\"true\" />\n    <layout>\n      <window_info active=\"true\" content_ui=\"combo\" id=\"Project\" order=\"0\" visible=\"true\" weight=\"0.18443997\" />\n      <window_info id=\"Structure\" order=\"1\" side_tool=\"true\" weight=\"0.25\" />\n      <window_info id=\"Designer\" order=\"2\" />\n      <window_info id=\"JRebel\" order=\"3\" side_tool=\"true\" />\n      <window_info id=\"Image Layers\" order=\"4\" />\n      <window_info id=\"Capture Tool\" order=\"5\" />\n      <window_info id=\"UI Designer\" order=\"6\" />\n      <window_info id=\"Favorites\" order=\"7\" side_tool=\"true\" />\n      <window_info id=\"Web\" order=\"8\" side_tool=\"true\" />\n      <window_info anchor=\"bottom\" id=\"Message\" order=\"0\" />\n      <window_info anchor=\"bottom\" id=\"Find\" order=\"1\" weight=\"0.32924962\" />\n      <window_info anchor=\"bottom\" id=\"Run\" order=\"2\" weight=\"0.22664624\" />\n      <window_info anchor=\"bottom\" id=\"Debug\" order=\"3\" visible=\"true\" weight=\"0.22358346\" />\n      <window_info anchor=\"bottom\" id=\"Cvs\" order=\"4\" weight=\"0.25\" />\n      <window_info anchor=\"bottom\" id=\"Inspection\" order=\"5\" weight=\"0.4\" />\n      <window_info anchor=\"bottom\" id=\"TODO\" order=\"6\" />\n      <window_info anchor=\"bottom\" id=\"Spring\" order=\"7\" />\n      <window_info anchor=\"bottom\" id=\"Terminal\" order=\"8\" sideWeight=\"0.49932975\" weight=\"0.34609494\" />\n      <window_info anchor=\"bottom\" id=\"Docker\" order=\"9\" />\n      <window_info anchor=\"bottom\" id=\"Event Log\" order=\"10\" sideWeight=\"0.50067025\" side_tool=\"true\" weight=\"0.32924962\" />\n      <window_info anchor=\"bottom\" id=\"Java Enterprise\" order=\"11\" />\n      <window_info anchor=\"bottom\" id=\"Database Changes\" order=\"12\" />\n      <window_info anchor=\"bottom\" id=\"Version Control\" order=\"13\" sideWeight=\"0.49932975\" weight=\"0.424196\" />\n      <window_info anchor=\"bottom\" id=\"JRebel Executor\" order=\"14\" />\n      <window_info anchor=\"bottom\" id=\"JRebel Console\" order=\"15\" side_tool=\"true\" />\n      <window_info anchor=\"bottom\" id=\"Messages\" order=\"16\" weight=\"0.32924962\" />\n      <window_info anchor=\"bottom\" id=\"Statistic\" order=\"17\" weight=\"0.29862174\" />\n      <window_info anchor=\"right\" id=\"Commander\" internal_type=\"SLIDING\" order=\"0\" type=\"SLIDING\" weight=\"0.4\" />\n      <window_info anchor=\"right\" id=\"Ant Build\" order=\"1\" weight=\"0.25\" />\n      <window_info anchor=\"right\" content_ui=\"combo\" id=\"Hierarchy\" order=\"2\" weight=\"0.25\" />\n      <window_info anchor=\"right\" id=\"Maven\" order=\"3\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" id=\"Palette\" order=\"4\" />\n      <window_info anchor=\"right\" id=\"Capture Analysis\" order=\"5\" />\n      <window_info anchor=\"right\" id=\"aiXcoder\" order=\"6\" />\n      <window_info anchor=\"right\" id=\"Database\" order=\"7\" />\n      <window_info anchor=\"right\" id=\"Theme Preview\" order=\"8\" />\n      <window_info anchor=\"right\" id=\"Palette&#9;\" order=\"9\" />\n      <window_info anchor=\"right\" id=\"Translate\" order=\"10\" />\n      <window_info anchor=\"right\" id=\"Bean Validation\" order=\"11\" />\n      <window_info anchor=\"right\" id=\"SciView\" order=\"12\" />\n    </layout>\n  </component>\n  <component name=\"TypeScriptGeneratedFilesManager\">\n    <option name=\"version\" value=\"1\" />\n  </component>\n  <component name=\"Vcs.Log.Tabs.Properties\">\n    <option name=\"TAB_STATES\">\n      <map>\n        <entry key=\"MAIN\">\n          <value>\n            <State>\n              <option name=\"RECENTLY_FILTERED_USER_GROUPS\">\n                <collection />\n              </option>\n              <option name=\"RECENTLY_FILTERED_BRANCH_GROUPS\">\n                <collection />\n              </option>\n              <option name=\"COLUMN_ORDER\">\n                <list>\n                  <option value=\"0\" />\n                  <option value=\"1\" />\n                  <option value=\"2\" />\n                  <option value=\"3\" />\n                </list>\n              </option>\n            </State>\n          </value>\n        </entry>\n      </map>\n    </option>\n    <option name=\"RECENT_FILTERS\">\n      <map>\n        <entry key=\"Branch\">\n          <value>\n            <list />\n          </value>\n        </entry>\n        <entry key=\"User\">\n          <value>\n            <list />\n          </value>\n        </entry>\n      </map>\n    </option>\n  </component>\n  <component name=\"VcsManagerConfiguration\">\n    <MESSAGE value=\"V1.2增加新功能特性\" />\n    <MESSAGE value=\"修改md文件\" />\n    <option name=\"LAST_COMMIT_MESSAGE\" value=\"修改md文件\" />\n  </component>\n  <component name=\"XDebuggerManager\">\n    <breakpoint-manager>\n      <breakpoints>\n        <line-breakpoint enabled=\"true\" type=\"java-line\">\n          <url>file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/EmailServiceImpl.java</url>\n          <line>99</line>\n          <properties />\n          <option name=\"timeStamp\" value=\"2\" />\n        </line-breakpoint>\n        <line-breakpoint enabled=\"true\" type=\"java-line\">\n          <url>file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/EmailServiceImpl.java</url>\n          <line>66</line>\n          <properties />\n          <option name=\"timeStamp\" value=\"7\" />\n        </line-breakpoint>\n        <line-breakpoint enabled=\"true\" type=\"java-line\">\n          <url>jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.6.RELEASE/spring-context-support-5.1.6.RELEASE.jar!/org/springframework/mail/javamail/JavaMailSenderImpl.class</url>\n          <line>145</line>\n          <properties />\n          <option name=\"timeStamp\" value=\"8\" />\n        </line-breakpoint>\n      </breakpoints>\n    </breakpoint-manager>\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://$PROJECT_DIR$/1231.txt\" />\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/Swagger2.java\" />\n    <entry file=\"file://$PROJECT_DIR$/db_springbootshopmaster.sql\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"216\">\n          <caret line=\"8\" column=\"29\" selection-end-line=\"325\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/verificationcodeimg.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"216\">\n          <caret line=\"8\" column=\"33\" selection-start-line=\"8\" selection-start-column=\"33\" selection-end-line=\"8\" selection-end-column=\"33\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/EmailSend.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/LoginController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-153\">\n          <caret line=\"16\" column=\"13\" selection-start-line=\"16\" selection-start-column=\"13\" selection-end-line=\"16\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/UserController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-477\">\n          <caret line=\"20\" column=\"13\" selection-start-line=\"20\" selection-start-column=\"13\" selection-end-line=\"20\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"jar://D:/java/src.zip!/java/lang/System.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"145\">\n          <caret line=\"1203\" column=\"22\" selection-start-line=\"1203\" selection-start-column=\"15\" selection-end-line=\"1203\" selection-end-column=\"22\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/codingInstall/apache-maven-3.6.1-bin/apache-maven-3.6.1/conf/settings.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-798\" />\n      </provider>\n    </entry>\n    <entry file=\"jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.17/poi-3.17.jar!/org/apache/poi/hssf/usermodel/HSSFCellStyle.class\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"92\">\n          <caret line=\"23\" column=\"19\" selection-start-line=\"23\" selection-start-column=\"19\" selection-end-line=\"23\" selection-end-column=\"19\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/util/ImageUtil.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"93\">\n          <caret line=\"21\" column=\"40\" lean-forward=\"true\" selection-start-line=\"21\" selection-start-column=\"40\" selection-end-line=\"21\" selection-end-column=\"40\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/config/WebMvcConfig.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"513\">\n          <caret line=\"29\" column=\"12\" selection-start-line=\"29\" selection-start-column=\"12\" selection-end-line=\"29\" selection-end-column=\"29\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ImageUtil.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"104\">\n          <caret line=\"25\" column=\"10\" selection-start-line=\"25\" selection-start-column=\"10\" selection-end-line=\"25\" selection-end-column=\"29\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/GoodsController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-194\">\n          <caret line=\"61\" column=\"9\" lean-forward=\"true\" selection-start-line=\"61\" selection-start-column=\"9\" selection-end-line=\"61\" selection-end-column=\"9\" />\n          <folding>\n            <element signature=\"method#getAllGoods#0;class#GoodsController#0\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.6.RELEASE/spring-web-5.1.6.RELEASE.jar!/org/springframework/web/method/support/InvocableHandlerMethod.class\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"93\">\n          <caret line=\"106\" selection-start-line=\"106\" selection-end-line=\"106\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/SpringbootSchoolShopApplication.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"267\">\n          <caret line=\"33\" selection-start-line=\"33\" selection-end-line=\"33\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/EmailUtil.java\" />\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/OrderController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"2489\">\n          <caret line=\"148\" column=\"9\" selection-start-line=\"148\" selection-start-column=\"9\" selection-end-line=\"148\" selection-end-column=\"9\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/EmailService.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"209\">\n          <caret line=\"11\" column=\"24\" selection-start-line=\"11\" selection-start-column=\"24\" selection-end-line=\"11\" selection-end-column=\"24\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/AdminOrderController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"323\">\n          <caret line=\"31\" column=\"12\" selection-start-line=\"31\" selection-start-column=\"12\" selection-end-line=\"31\" selection-end-column=\"12\" />\n          <folding>\n            <element signature=\"method#sendOrder#0;class#AdminOrderController#0\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.6.RELEASE/spring-context-support-5.1.6.RELEASE.jar!/org/springframework/mail/MailSender.class\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"95\">\n          <caret line=\"8\" column=\"9\" selection-start-line=\"8\" selection-start-column=\"9\" selection-end-line=\"8\" selection-end-column=\"9\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.6.RELEASE/spring-context-support-5.1.6.RELEASE.jar!/org/springframework/mail/javamail/JavaMailSenderImpl.class\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1729\">\n          <caret line=\"144\" column=\"16\" selection-start-line=\"144\" selection-start-column=\"16\" selection-end-line=\"144\" selection-end-column=\"16\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/resources/application.yml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"798\">\n          <caret line=\"42\" column=\"19\" selection-start-line=\"42\" selection-start-column=\"19\" selection-end-line=\"42\" selection-end-column=\"19\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/ExcelController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"494\">\n          <caret line=\"38\" column=\"18\" selection-start-line=\"38\" selection-start-column=\"18\" selection-end-line=\"38\" selection-end-column=\"18\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/verificate/Verificate.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"38\">\n          <caret line=\"19\" column=\"73\" lean-forward=\"true\" selection-start-line=\"19\" selection-start-column=\"73\" selection-end-line=\"19\" selection-end-column=\"73\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/CommentServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"114\">\n          <caret line=\"13\" column=\"13\" selection-start-line=\"13\" selection-start-column=\"13\" selection-end-line=\"13\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/ActivityServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"95\">\n          <caret line=\"12\" column=\"8\" selection-start-line=\"12\" selection-start-column=\"1\" selection-end-line=\"12\" selection-end-column=\"8\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/AddressServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"114\">\n          <caret line=\"13\" column=\"13\" selection-start-line=\"13\" selection-start-column=\"13\" selection-end-line=\"13\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/AdminServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"114\">\n          <caret line=\"10\" column=\"13\" selection-start-line=\"10\" selection-start-column=\"13\" selection-end-line=\"10\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/CateServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"114\">\n          <caret line=\"13\" column=\"13\" selection-start-line=\"13\" selection-start-column=\"13\" selection-end-line=\"13\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/EmailServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"381\">\n          <caret line=\"32\" lean-forward=\"true\" selection-start-line=\"32\" selection-end-line=\"32\" />\n          <folding>\n            <element signature=\"imports\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/pom.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"212\">\n          <caret line=\"172\" column=\"25\" selection-start-line=\"172\" selection-start-column=\"25\" selection-end-line=\"172\" selection-end-column=\"25\" />\n        </state>\n      </provider>\n      <provider editor-type-id=\"MavenHelperPluginDependencyAnalyzer\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ExcelUtils.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"399\">\n          <caret line=\"40\" column=\"18\" selection-start-line=\"40\" selection-start-column=\"18\" selection-end-line=\"40\" selection-end-column=\"18\" />\n          <folding>\n            <element signature=\"imports\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/shopcart.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/addGoods.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"532\">\n          <caret line=\"28\" selection-start-line=\"28\" selection-end-line=\"28\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminAllGoods.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/ActivityController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-779\">\n          <caret line=\"26\" column=\"13\" selection-start-line=\"26\" selection-start-column=\"13\" selection-end-line=\"26\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/README.md\">\n      <provider selected=\"true\" editor-type-id=\"split-provider[text-editor;markdown-preview-editor]\">\n        <state split_layout=\"SPLIT\">\n          <first_editor relative-caret-position=\"395\">\n            <caret line=\"119\" column=\"44\" selection-start-line=\"119\" selection-start-column=\"44\" selection-end-line=\"119\" selection-end-column=\"44\" />\n          </first_editor>\n          <second_editor />\n        </state>\n      </provider>\n    </entry>\n  </component>\n  <component name=\"masterDetails\">\n    <states>\n      <state key=\"ArtifactsStructureConfigurable.UI\">\n        <settings>\n          <artifact-editor />\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"FacetStructureConfigurable.UI\">\n        <settings>\n          <last-edited>Spring</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"GlobalLibrariesConfigurable.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"JdkListConfigurable.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ModuleStructureConfigurable.UI\">\n        <settings>\n          <last-edited>OnlineSchoolShop</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n                <option value=\"0.6\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectJDKs.UI\">\n        <settings>\n          <last-edited>1.8</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectLibrariesConfigurable.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n    </states>\n  </component>\n</project>"
  },
  {
    "path": "README.md",
    "content": "**OnlineSchoolShop-基于Spring boot/SSM商城的搭建教程**\n\n加微信18229819406，提供有偿定制化修改\n疑难代码问题，也可以加微信提供指导，包括问题定位，代码运行，服务改写\n微信公众号 codingzx  ，后台留言答疑   [承接微信公众号后台开发]\n\n> API接口访问  http://127.0.0.1:8081/shop/swagger-ui.html\n\n> 管理员访问 http://127.0.0.1:8081/shop/admin/login\n\n> 普通用户访问 http://127.0.0.1:8081/shop/\n\n>管理员帐号  admin 12345678\n\n>用户帐号  root codingzx  admin  密码均为 12345678\n \n 图片保存路径：  可以全局搜索后替换\n \n windows:  D:/upload\n \n linux:  /usr/upload\n     \n mac：需要修改代码，见下面已知问题记录. 或者代码全局搜索   // todo mac需要修改地址 \n   \n  \n \n**技术栈**\n * 后端： SpringBoot Swagger Docker（docker需自己搭建docker环境）\n * 前端： JSP \n * 数据库：MySQL\n * 技术语言 jdk 1.8\n * 开发平台 Idea 2018 +win10\n * 运行环境 Linux/Windows\n \n毕业设计基于SSM/Springboot的商城项目，一个简单的商城，界面友好，但是不是很漂亮。实现了商城所有基本功能。\n作为改写的基础模板，可以增加或者改写的功能：\n\n1. [已实现]  增加word和excel模板     ；  excel导出  和 文件导入\n\n2. 增加redis，存储商品信息主要存储。\n\n   增加mq，订单并发，再购物车层次上做到入库并发控制\n   \n3. [已实现]  增加邮件发送，订单支付成功和发货成功给客户和管理员分别发送邮件     ； # 已实现  (代码注释掉，根据自己需求增加)\n\n4. 增加支付功能，可以用支付宝当面付，入门门槛低\n\n5. 增加合作登陆，用QQ/微信/GITHUB等登陆，存储信息入库\n\n6. 增加数据分析，用Echart分析数据\n\n7. 部署采用docker和nginx做到动静分离。需要改写jsp为模板themeleaf。\n\n8. [已实现]  swagger 接口在线预览   # 已实现\n\n9. 每天定时任务，清理异常订单 并发送邮件\n\n10. 死信队列处理延迟任务    用户下单1小时后，自动检查订单是否发货\n\n11. html导出pdf  -  wkhtmltopdf插件\n\n12. [已实现]  增加货物自提功能，输入验证码后用户自提  \n\n\n\n\n有两个版本 一个springboot，一个ssm（已废弃）。 <br/>\n\n PS:最近发现以前的毕业设计居然有很多人引用，github上的fork和star数也很多，感觉无形之间又'帮助'了很多人。\n \n 本项目主要也是改写的基础的商城项目，没有任何的技巧。\n \n 一.系统架构\n 前端：jsp\n 后台：springboot\n 二.项目运行图\n 用户端：\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172532928.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172551212.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172611947.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n 管理员端：\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172649732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172710683.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172724371.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172738766.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70)\n\n\n# 图片不能显示\n\n 原因：初始图片没有存储，可以在后台添加一个商品，查看图片存储路径:\n \n windows:D:/upload\n \n Linux:/usr/upload\n \n# 其他 \n \n 有好的开发分支欢迎提交Pr\n\n目前已知问题：\n\n 1.  项目适配mac有些问题需要修改，默认创建图片文件夹，mac会提示没有权限创建.\n\n\n\n> 对应解决方案： 修改tomcat的虚拟映射目录 ； 修改图片入库\n  \n - \"WebMvcConfig\"类修改Mac对应的图片存储目录，如把D盘改为Mac对应用户的文件夹 /users/codingzx/upload （codingzx为你自己的mac用户名）\n   \n - 修改图片入库路径\n  \n 2.  sendEmailToAdmin   和  sendEmailToUser 方法实现有点问题  待更新  。可以注释掉相应代码\n \n \n \n \n 3.  SSM版本图片显示不出来 \n \n > 对应解决方案： 修改tomcat的虚拟映射目录 ；\n \n 手动更改tomcat的配置文件 ，添加本地图片到 虚拟路径“/pictures”的映射\n \n \n \n \n \n 更新日志：\n \n"
  },
  {
    "path": "SpringbootSchoolShop/.gitignore",
    "content": "HELP.md\n/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\n/build/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "SpringbootSchoolShop/.mvn/wrapper/MavenWrapperDownloader.java",
    "content": "/*\nLicensed to the Apache Software Foundation (ASF) under one\nor more contributor license agreements.  See the NOTICE file\ndistributed with this work for additional information\nregarding copyright ownership.  The ASF licenses this file\nto you under the Apache License, Version 2.0 (the\n\"License\"); you may not use this file except in compliance\nwith the License.  You may obtain a copy of the License at\n\n  https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing,\nsoftware distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations\nunder the License.\n*/\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.net.URL;\nimport java.nio.channels.Channels;\nimport java.nio.channels.ReadableByteChannel;\nimport java.util.Properties;\n\npublic class MavenWrapperDownloader {\n\n    /**\n     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.\n     */\n    private static final String DEFAULT_DOWNLOAD_URL =\n            \"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar\";\n\n    /**\n     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to\n     * use instead of the default one.\n     */\n    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =\n            \".mvn/wrapper/maven-wrapper.properties\";\n\n    /**\n     * Path where the maven-wrapper.jar will be saved to.\n     */\n    private static final String MAVEN_WRAPPER_JAR_PATH =\n            \".mvn/wrapper/maven-wrapper.jar\";\n\n    /**\n     * Name of the property which should be used to override the default download url for the wrapper.\n     */\n    private static final String PROPERTY_NAME_WRAPPER_URL = \"wrapperUrl\";\n\n    public static void main(String args[]) {\n        System.out.println(\"- Downloader started\");\n        File baseDirectory = new File(args[0]);\n        System.out.println(\"- Using base directory: \" + baseDirectory.getAbsolutePath());\n\n        // If the maven-wrapper.properties exists, read it and check if it contains a custom\n        // wrapperUrl parameter.\n        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);\n        String url = DEFAULT_DOWNLOAD_URL;\n        if (mavenWrapperPropertyFile.exists()) {\n            FileInputStream mavenWrapperPropertyFileInputStream = null;\n            try {\n                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);\n                Properties mavenWrapperProperties = new Properties();\n                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);\n                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);\n            } catch (IOException e) {\n                System.out.println(\"- ERROR loading '\" + MAVEN_WRAPPER_PROPERTIES_PATH + \"'\");\n            } finally {\n                try {\n                    if (mavenWrapperPropertyFileInputStream != null) {\n                        mavenWrapperPropertyFileInputStream.close();\n                    }\n                } catch (IOException e) {\n                    // Ignore ...\n                }\n            }\n        }\n        System.out.println(\"- Downloading from: : \" + url);\n\n        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);\n        if (!outputFile.getParentFile().exists()) {\n            if (!outputFile.getParentFile().mkdirs()) {\n                System.out.println(\n                        \"- ERROR creating output direcrory '\" + outputFile.getParentFile().getAbsolutePath() + \"'\");\n            }\n        }\n        System.out.println(\"- Downloading to: \" + outputFile.getAbsolutePath());\n        try {\n            downloadFileFromURL(url, outputFile);\n            System.out.println(\"Done\");\n            System.exit(0);\n        } catch (Throwable e) {\n            System.out.println(\"- Error downloading\");\n            e.printStackTrace();\n            System.exit(1);\n        }\n    }\n\n    private static void downloadFileFromURL(String urlString, File destination) throws Exception {\n        URL website = new URL(urlString);\n        ReadableByteChannel rbc;\n        rbc = Channels.newChannel(website.openStream());\n        FileOutputStream fos = new FileOutputStream(destination);\n        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);\n        fos.close();\n        rbc.close();\n    }\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/.mvn/wrapper/maven-wrapper.properties",
    "content": "distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip\n"
  },
  {
    "path": "SpringbootSchoolShop/mvnw",
    "content": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#    https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n# ----------------------------------------------------------------------------\n\n# ----------------------------------------------------------------------------\n# Maven2 Start Up Batch script\n#\n# Required ENV vars:\n# ------------------\n#   JAVA_HOME - location of a JDK home dir\n#\n# Optional ENV vars\n# -----------------\n#   M2_HOME - location of maven2's installed home dir\n#   MAVEN_OPTS - parameters passed to the Java VM when running Maven\n#     e.g. to debug Maven itself, use\n#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n# ----------------------------------------------------------------------------\n\nif [ -z \"$MAVEN_SKIP_RC\" ] ; then\n\n  if [ -f /etc/mavenrc ] ; then\n    . /etc/mavenrc\n  fi\n\n  if [ -f \"$HOME/.mavenrc\" ] ; then\n    . \"$HOME/.mavenrc\"\n  fi\n\nfi\n\n# OS specific support.  $var _must_ be set to either true or false.\ncygwin=false;\ndarwin=false;\nmingw=false\ncase \"`uname`\" in\n  CYGWIN*) cygwin=true ;;\n  MINGW*) mingw=true;;\n  Darwin*) darwin=true\n    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home\n    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html\n    if [ -z \"$JAVA_HOME\" ]; then\n      if [ -x \"/usr/libexec/java_home\" ]; then\n        export JAVA_HOME=\"`/usr/libexec/java_home`\"\n      else\n        export JAVA_HOME=\"/Library/Java/Home\"\n      fi\n    fi\n    ;;\nesac\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  if [ -r /etc/gentoo-release ] ; then\n    JAVA_HOME=`java-config --jre-home`\n  fi\nfi\n\nif [ -z \"$M2_HOME\" ] ; then\n  ## resolve links - $0 may be a link to maven's home\n  PRG=\"$0\"\n\n  # need this for relative symlinks\n  while [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n      PRG=\"$link\"\n    else\n      PRG=\"`dirname \"$PRG\"`/$link\"\n    fi\n  done\n\n  saveddir=`pwd`\n\n  M2_HOME=`dirname \"$PRG\"`/..\n\n  # make it fully qualified\n  M2_HOME=`cd \"$M2_HOME\" && pwd`\n\n  cd \"$saveddir\"\n  # echo Using m2 at $M2_HOME\nfi\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched\nif $cygwin ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --unix \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --unix \"$CLASSPATH\"`\nfi\n\n# For Mingw, ensure paths are in UNIX format before anything is touched\nif $mingw ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=\"`(cd \"$M2_HOME\"; pwd)`\"\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=\"`(cd \"$JAVA_HOME\"; pwd)`\"\n  # TODO classpath?\nfi\n\nif [ -z \"$JAVA_HOME\" ]; then\n  javaExecutable=\"`which javac`\"\n  if [ -n \"$javaExecutable\" ] && ! [ \"`expr \\\"$javaExecutable\\\" : '\\([^ ]*\\)'`\" = \"no\" ]; then\n    # readlink(1) is not available as standard on Solaris 10.\n    readLink=`which readlink`\n    if [ ! `expr \"$readLink\" : '\\([^ ]*\\)'` = \"no\" ]; then\n      if $darwin ; then\n        javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n        javaExecutable=\"`cd \\\"$javaHome\\\" && pwd -P`/javac\"\n      else\n        javaExecutable=\"`readlink -f \\\"$javaExecutable\\\"`\"\n      fi\n      javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n      javaHome=`expr \"$javaHome\" : '\\(.*\\)/bin'`\n      JAVA_HOME=\"$javaHome\"\n      export JAVA_HOME\n    fi\n  fi\nfi\n\nif [ -z \"$JAVACMD\" ] ; then\n  if [ -n \"$JAVA_HOME\"  ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n      # IBM's JDK on AIX uses strange locations for the executables\n      JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n      JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n  else\n    JAVACMD=\"`which java`\"\n  fi\nfi\n\nif [ ! -x \"$JAVACMD\" ] ; then\n  echo \"Error: JAVA_HOME is not defined correctly.\" >&2\n  echo \"  We cannot execute $JAVACMD\" >&2\n  exit 1\nfi\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  echo \"Warning: JAVA_HOME environment variable is not set.\"\nfi\n\nCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher\n\n# traverses directory structure from process work directory to filesystem root\n# first directory with .mvn subdirectory is considered project base directory\nfind_maven_basedir() {\n\n  if [ -z \"$1\" ]\n  then\n    echo \"Path not specified to find_maven_basedir\"\n    return 1\n  fi\n\n  basedir=\"$1\"\n  wdir=\"$1\"\n  while [ \"$wdir\" != '/' ] ; do\n    if [ -d \"$wdir\"/.mvn ] ; then\n      basedir=$wdir\n      break\n    fi\n    # workaround for JBEAP-8937 (on Solaris 10/Sparc)\n    if [ -d \"${wdir}\" ]; then\n      wdir=`cd \"$wdir/..\"; pwd`\n    fi\n    # end of workaround\n  done\n  echo \"${basedir}\"\n}\n\n# concatenates all lines of a file\nconcat_lines() {\n  if [ -f \"$1\" ]; then\n    echo \"$(tr -s '\\n' ' ' < \"$1\")\"\n  fi\n}\n\nBASE_DIR=`find_maven_basedir \"$(pwd)\"`\nif [ -z \"$BASE_DIR\" ]; then\n  exit 1;\nfi\n\n##########################################################################################\n# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central\n# This allows using the maven wrapper in projects that prohibit checking in binary data.\n##########################################################################################\nif [ -r \"$BASE_DIR/.mvn/wrapper/maven-wrapper.jar\" ]; then\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Found .mvn/wrapper/maven-wrapper.jar\"\n    fi\nelse\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ...\"\n    fi\n    jarUrl=\"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar\"\n    while IFS=\"=\" read key value; do\n      case \"$key\" in (wrapperUrl) jarUrl=\"$value\"; break ;;\n      esac\n    done < \"$BASE_DIR/.mvn/wrapper/maven-wrapper.properties\"\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Downloading from: $jarUrl\"\n    fi\n    wrapperJarPath=\"$BASE_DIR/.mvn/wrapper/maven-wrapper.jar\"\n\n    if command -v wget > /dev/null; then\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Found wget ... using wget\"\n        fi\n        wget \"$jarUrl\" -O \"$wrapperJarPath\"\n    elif command -v curl > /dev/null; then\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Found curl ... using curl\"\n        fi\n        curl -o \"$wrapperJarPath\" \"$jarUrl\"\n    else\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Falling back to using Java to download\"\n        fi\n        javaClass=\"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java\"\n        if [ -e \"$javaClass\" ]; then\n            if [ ! -e \"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class\" ]; then\n                if [ \"$MVNW_VERBOSE\" = true ]; then\n                  echo \" - Compiling MavenWrapperDownloader.java ...\"\n                fi\n                # Compiling the Java class\n                (\"$JAVA_HOME/bin/javac\" \"$javaClass\")\n            fi\n            if [ -e \"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class\" ]; then\n                # Running the downloader\n                if [ \"$MVNW_VERBOSE\" = true ]; then\n                  echo \" - Running MavenWrapperDownloader.java ...\"\n                fi\n                (\"$JAVA_HOME/bin/java\" -cp .mvn/wrapper MavenWrapperDownloader \"$MAVEN_PROJECTBASEDIR\")\n            fi\n        fi\n    fi\nfi\n##########################################################################################\n# End of extension\n##########################################################################################\n\nexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-\"$BASE_DIR\"}\nif [ \"$MVNW_VERBOSE\" = true ]; then\n  echo $MAVEN_PROJECTBASEDIR\nfi\nMAVEN_OPTS=\"$(concat_lines \"$MAVEN_PROJECTBASEDIR/.mvn/jvm.config\") $MAVEN_OPTS\"\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --path --windows \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --path --windows \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --windows \"$CLASSPATH\"`\n  [ -n \"$MAVEN_PROJECTBASEDIR\" ] &&\n    MAVEN_PROJECTBASEDIR=`cygpath --path --windows \"$MAVEN_PROJECTBASEDIR\"`\nfi\n\nWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nexec \"$JAVACMD\" \\\n  $MAVEN_OPTS \\\n  -classpath \"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar\" \\\n  \"-Dmaven.home=${M2_HOME}\" \"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}\" \\\n  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG \"$@\"\n"
  },
  {
    "path": "SpringbootSchoolShop/mvnw.cmd",
    "content": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software Foundation (ASF) under one\n@REM or more contributor license agreements.  See the NOTICE file\n@REM distributed with this work for additional information\n@REM regarding copyright ownership.  The ASF licenses this file\n@REM to you under the Apache License, Version 2.0 (the\n@REM \"License\"); you may not use this file except in compliance\n@REM with the License.  You may obtain a copy of the License at\n@REM\n@REM    https://www.apache.org/licenses/LICENSE-2.0\n@REM\n@REM Unless required by applicable law or agreed to in writing,\n@REM software distributed under the License is distributed on an\n@REM \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n@REM KIND, either express or implied.  See the License for the\n@REM specific language governing permissions and limitations\n@REM under the License.\n@REM ----------------------------------------------------------------------------\n\n@REM ----------------------------------------------------------------------------\n@REM Maven2 Start Up Batch script\n@REM\n@REM Required ENV vars:\n@REM JAVA_HOME - location of a JDK home dir\n@REM\n@REM Optional ENV vars\n@REM M2_HOME - location of maven2's installed home dir\n@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands\n@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending\n@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven\n@REM     e.g. to debug Maven itself, use\n@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n@REM ----------------------------------------------------------------------------\n\n@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'\n@echo off\n@REM set title of command window\ntitle %0\n@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'\n@if \"%MAVEN_BATCH_ECHO%\" == \"on\"  echo %MAVEN_BATCH_ECHO%\n\n@REM set %HOME% to equivalent of $HOME\nif \"%HOME%\" == \"\" (set \"HOME=%HOMEDRIVE%%HOMEPATH%\")\n\n@REM Execute a user defined script before this one\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPre\n@REM check for pre script, once with legacy .bat ending and once with .cmd ending\nif exist \"%HOME%\\mavenrc_pre.bat\" call \"%HOME%\\mavenrc_pre.bat\"\nif exist \"%HOME%\\mavenrc_pre.cmd\" call \"%HOME%\\mavenrc_pre.cmd\"\n:skipRcPre\n\n@setlocal\n\nset ERROR_CODE=0\n\n@REM To isolate internal variables from possible post scripts, we use another setlocal\n@setlocal\n\n@REM ==== START VALIDATION ====\nif not \"%JAVA_HOME%\" == \"\" goto OkJHome\n\necho.\necho Error: JAVA_HOME not found in your environment. >&2\necho Please set the JAVA_HOME variable in your environment to match the >&2\necho location of your Java installation. >&2\necho.\ngoto error\n\n:OkJHome\nif exist \"%JAVA_HOME%\\bin\\java.exe\" goto init\n\necho.\necho Error: JAVA_HOME is set to an invalid directory. >&2\necho JAVA_HOME = \"%JAVA_HOME%\" >&2\necho Please set the JAVA_HOME variable in your environment to match the >&2\necho location of your Java installation. >&2\necho.\ngoto error\n\n@REM ==== END VALIDATION ====\n\n:init\n\n@REM Find the project base dir, i.e. the directory that contains the folder \".mvn\".\n@REM Fallback to current working directory if not found.\n\nset MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%\nIF NOT \"%MAVEN_PROJECTBASEDIR%\"==\"\" goto endDetectBaseDir\n\nset EXEC_DIR=%CD%\nset WDIR=%EXEC_DIR%\n:findBaseDir\nIF EXIST \"%WDIR%\"\\.mvn goto baseDirFound\ncd ..\nIF \"%WDIR%\"==\"%CD%\" goto baseDirNotFound\nset WDIR=%CD%\ngoto findBaseDir\n\n:baseDirFound\nset MAVEN_PROJECTBASEDIR=%WDIR%\ncd \"%EXEC_DIR%\"\ngoto endDetectBaseDir\n\n:baseDirNotFound\nset MAVEN_PROJECTBASEDIR=%EXEC_DIR%\ncd \"%EXEC_DIR%\"\n\n:endDetectBaseDir\n\nIF NOT EXIST \"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\" goto endReadAdditionalConfig\n\n@setlocal EnableExtensions EnableDelayedExpansion\nfor /F \"usebackq delims=\" %%a in (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a\n@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%\n\n:endReadAdditionalConfig\n\nSET MAVEN_JAVA_EXE=\"%JAVA_HOME%\\bin\\java.exe\"\nset WRAPPER_JAR=\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.jar\"\nset WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nset DOWNLOAD_URL=\"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar\"\nFOR /F \"tokens=1,2 delims==\" %%A IN (%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.properties) DO (\n\tIF \"%%A\"==\"wrapperUrl\" SET DOWNLOAD_URL=%%B \n)\n\n@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central\n@REM This allows using the maven wrapper in projects that prohibit checking in binary data.\nif exist %WRAPPER_JAR% (\n    echo Found %WRAPPER_JAR%\n) else (\n    echo Couldn't find %WRAPPER_JAR%, downloading it ...\n\techo Downloading from: %DOWNLOAD_URL%\n    powershell -Command \"(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')\"\n    echo Finished downloading %WRAPPER_JAR%\n)\n@REM End of extension\n\n%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% \"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%\" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*\nif ERRORLEVEL 1 goto error\ngoto end\n\n:error\nset ERROR_CODE=1\n\n:end\n@endlocal & set ERROR_CODE=%ERROR_CODE%\n\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPost\n@REM check for post script, once with legacy .bat ending and once with .cmd ending\nif exist \"%HOME%\\mavenrc_post.bat\" call \"%HOME%\\mavenrc_post.bat\"\nif exist \"%HOME%\\mavenrc_post.cmd\" call \"%HOME%\\mavenrc_post.cmd\"\n:skipRcPost\n\n@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'\nif \"%MAVEN_BATCH_PAUSE%\" == \"on\" pause\n\nif \"%MAVEN_TERMINATE_CMD%\" == \"on\" exit %ERROR_CODE%\n\nexit /B %ERROR_CODE%\n"
  },
  {
    "path": "SpringbootSchoolShop/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.1.4.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n    <groupId>com.zhang</groupId>\n    <artifactId>SpringbootSchoolShop</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>SpringbootSchoolShop</name>\n    <description>Demo project for Spring Boot</description>\n    <packaging>jar</packaging>\n\n    <properties>\n        <java.version>1.8</java.version>\n        <skipTests>true</skipTests>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>c3p0</groupId>\n            <artifactId>c3p0</artifactId>\n            <version>0.9.1.2</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <!-- 添加servlet依赖模块 -->\n        <dependency>\n            <groupId>javax.servlet</groupId>\n            <artifactId>javax.servlet-api</artifactId>\n        </dependency>\n        <!-- 添加jstl标签库依赖模块 -->\n        <dependency>\n            <groupId>javax.servlet</groupId>\n            <artifactId>jstl</artifactId>\n        </dependency>\n        <!--添加tomcat依赖模块.-->\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-tomcat</artifactId>\n        </dependency>\n        <!-- 使用jsp引擎，springboot内置tomcat没有此依赖 -->\n        <dependency>\n            <groupId>org.apache.tomcat.embed</groupId>\n            <artifactId>tomcat-embed-jasper</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n            <version>1.3.1</version>\n        </dependency>\n        <dependency>\n            <groupId>org.mybatis.generator</groupId>\n            <artifactId>mybatis-generator-core</artifactId>\n            <version>1.3.5</version>\n        </dependency>\n        <!-- 3.lombok插件-->\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <optional>true</optional>\n        </dependency>\n        <!-- 分页插件 -->\n        <dependency>\n            <groupId>com.github.pagehelper</groupId>\n            <artifactId>pagehelper-spring-boot-starter</artifactId>\n            <version>1.2.5</version>\n        </dependency>\n        <!-- 6.热部署插件 -->\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-devtools</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n        <!-- 7.API测试工具 -->\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-swagger2</artifactId>\n            <version>2.7.0</version>\n        </dependency>\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-swagger-ui</artifactId>\n            <version>2.7.0</version>\n        </dependency>\n        <!-- 上面两个jar的必须的，下面这个是第三方的UI界面的美化，不是必需的 -->\n        <dependency>\n            <groupId>com.github.xiaoymin</groupId>\n            <artifactId>swagger-bootstrap-ui</artifactId>\n            <version>1.6</version>\n        </dependency>\n\n        <!-- 8. 字符串处理工具类 2.8.9-->\n        <dependency>\n            <groupId>com.fasterxml.jackson.core</groupId>\n            <artifactId>jackson-databind</artifactId>\n            <version>2.9.10.7</version>\n        </dependency>\n\n\n        <dependency>\n            <groupId>commons-fileupload</groupId>\n            <artifactId>commons-fileupload</artifactId>\n            <version>1.3.3</version>\n        </dependency>\n\n        <!--junit-->\n        <dependency>\n            <groupId>junit</groupId>\n            <artifactId>junit</artifactId>\n            <scope>test</scope>\n        </dependency>\n        <!--fastjson-->\n        <dependency>\n            <groupId>com.alibaba</groupId>\n            <artifactId>fastjson</artifactId>\n            <version>1.2.28</version>\n        </dependency>\n        <!--mail-->\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-mail</artifactId>\n        </dependency>\n        <!-- log4j -->\n        <dependency>\n            <groupId>org.slf4j</groupId>\n            <artifactId>slf4j-api</artifactId>\n            <version>1.7.30</version>\n        </dependency>\n\n\n\n        <dependency>\n            <groupId>org.apache.poi</groupId>\n            <artifactId>poi</artifactId>\n            <version>3.17</version>\n        </dependency>\n        <dependency>\n            <groupId>org.apache.poi</groupId>\n            <artifactId>poi-ooxml</artifactId>\n            <version>3.14</version>\n            <exclusions>\n                <exclusion>\n                    <artifactId>poi</artifactId>\n                    <groupId>org.apache.poi</groupId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n\n\n    </dependencies>\n\n\n    <build>\n        <resources>\n            <resource>\n                <directory>src/main/webapp</directory>\n                <targetPath>META-INF/resources</targetPath>\n                <includes>\n                    <include>**/**</include>\n                </includes>\n            </resource>\n            <resource>\n                <directory>src/main/resources</directory>\n                <filtering>false</filtering>\n                <includes>\n                    <include>**/**</include>\n                </includes>\n            </resource>\n        </resources>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n                <configuration>\n                    <fork>true</fork>\n                </configuration>\n                <version>1.4.2.RELEASE</version>\n            </plugin>\n        </plugins>\n    </build>\n\n</project>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/SpringbootSchoolShopApplication.java",
    "content": "package com.zhang.ssmschoolshop;\n\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.boot.builder.SpringApplicationBuilder;\nimport org.springframework.boot.web.servlet.support.SpringBootServletInitializer;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.mail.MailException;\nimport org.springframework.mail.MailSender;\nimport org.springframework.mail.SimpleMailMessage;\nimport springfox.documentation.swagger2.annotations.EnableSwagger2;\n\n@SpringBootApplication\n@EnableSwagger2\n@MapperScan(\"com.zhang.ssmschoolshop.dao\")\npublic class SpringbootSchoolShopApplication extends SpringBootServletInitializer {\n\n    @Override\n    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {\n        return builder.sources(SpringbootSchoolShopApplication.class);\n    }\n\n    public static void main(String[] args) {\n        SpringApplication.run(SpringbootSchoolShopApplication.class, args);\n    }\n\n\n    @Bean\n    public MailSender mailSender(){\n        return new MailSender() {\n            @Override\n            public void send(SimpleMailMessage simpleMailMessage) throws MailException {\n\n            }\n\n            @Override\n            public void send(SimpleMailMessage... simpleMailMessages) throws MailException {\n\n            }\n        };\n    }\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/annotinon/ExportEntityMap.java",
    "content": "package com.zhang.ssmschoolshop.annotinon;\n\n/**\n * @author codingzx\n * @description\n * @date 2021/4/11 11:21\n */\n\nimport java.lang.annotation.*;\n\n/**\n * @author created by zhangxin27695\n * @Classname ExportEntityMap\n * @Description\n * @Date 2020-03-23 8:58\n */\n@Target({ElementType.FIELD})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface ExportEntityMap {\n\n    String EnName() default \"数据库列名\";\n\n    String CnName() default \"实体映射名\";\n\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/annotinon/MetricTime.java",
    "content": "package com.zhang.ssmschoolshop.annotinon;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.RetentionPolicy;\nimport java.lang.annotation.Target;\n\n/**\n * @author codingzx\n * @description\n * @date 2021/4/14 21:08\n */\n@Target({ElementType.METHOD})\n@Retention(RetentionPolicy.RUNTIME)\npublic @interface MetricTime {\n    String value();\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/config/SwaggerConfig.java",
    "content": "package com.zhang.ssmschoolshop.config;\r\nimport org.springframework.context.annotation.Bean;\r\nimport org.springframework.context.annotation.Configuration;\r\nimport springfox.documentation.builders.ApiInfoBuilder;\r\nimport springfox.documentation.builders.PathSelectors;\r\nimport springfox.documentation.builders.RequestHandlerSelectors;\r\nimport springfox.documentation.service.ApiInfo;\r\nimport springfox.documentation.service.Contact;\r\nimport springfox.documentation.spi.DocumentationType;\r\nimport springfox.documentation.spring.web.plugins.Docket;\r\nimport springfox.documentation.swagger2.annotations.EnableSwagger2;\r\n\r\n@Configuration\r\n@EnableSwagger2\r\npublic class SwaggerConfig {\r\n\r\n    @Bean\r\n    public Docket createRestApi() {\r\n        return new Docket(DocumentationType.SWAGGER_2)\r\n                .apiInfo(apiInfo())\r\n                .select()\r\n                .apis(RequestHandlerSelectors.basePackage(\"com.zhang.ssmschoolshop\"))\r\n                .paths(PathSelectors.any())\r\n                .build();\r\n    }\r\n\r\n    private ApiInfo apiInfo() {\r\n        return new ApiInfoBuilder()\r\n                .title(\"毕设商城系统API\")\r\n                .contact(new Contact(\"zhangxin\", \"http://www.github.com/codingzhangxin\", \"994683607@qq.com\"))\r\n                .version(\"1.0\")\r\n                .build();\r\n    }\r\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/config/WebMvcConfig.java",
    "content": "package com.zhang.ssmschoolshop.config;\r\n\r\n\r\nimport org.springframework.context.annotation.Configuration;\r\nimport org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\r\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurer;\r\n\r\n\r\n/**\r\n * @author created by CodingZhangxin\r\n * @version v.0.1\r\n * @Description TODO\r\n * @date 2019/5/10\r\n * @备注  springboot内置tomcat配置虚拟路径\r\n *      linux： /usr/upload  /pictures\r\n *      window:  d:/upload  /pictures\r\n **/\r\n\r\n@Configuration\r\npublic class WebMvcConfig implements WebMvcConfigurer {\r\n\r\n\r\n\r\n    @Override\r\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\r\n        String os = System.getProperty(\"os.name\");\r\n        String pathPatterns=\"/pictures/**\";\r\n        String pathAbsolute=\"file:D:/upload/\";\r\n        if (!os.toLowerCase().startsWith(\"windows\")){\r\n            // todo mac需要修改地址\r\n            pathAbsolute=\"file:/usr/upload/\";\r\n        }\r\n        registry.addResourceHandler(pathPatterns).addResourceLocations(pathAbsolute);\r\n\r\n    }\r\n\r\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/ActivityController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.entity.Goods;\nimport com.zhang.ssmschoolshop.service.ActivityService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport io.swagger.annotations.Api;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.List;\n\n@Controller\n@RequestMapping(\"/admin/activity\")\n@Api(value=\"促销活动controller\",tags={\"促销活动操作接口\"})\npublic class ActivityController {\n\n    @Autowired(required = false)\n    ActivityService activityService;\n\n    @Autowired(required = false)\n    GoodsService goodsService;\n\n    @RequestMapping(\"/show\")\n    public String showActivity(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, Model model, HttpSession session) {\n\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 10);\n\n        ActivityExample activityExample = new ActivityExample();\n        activityExample.or();\n\n        List<Activity> activityList = activityService.getAllActivity(activityExample);\n\n        //显示几个页号\n        PageInfo page = new PageInfo(activityList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"activity\";\n    }\n\n    @RequestMapping(\"/showjson\")\n    @ResponseBody\n    public Msg showActivityJson(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, Model model , HttpSession session) {\n\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n\n        ActivityExample activityExample = new ActivityExample();\n        activityExample.or();\n\n        List<Activity> activityList = activityService.getAllActivity(activityExample);\n\n        return Msg.success(\"获取活动信息成功\").add(\"activity\",activityList);\n    }\n\n    @RequestMapping(\"/add\")\n    public String showAddActivity(HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        return \"addActivity\";\n    }\n\n    @RequestMapping(\"/addResult\")\n    public String addActivity(Activity activity) {\n\n        activityService.insertActivitySelective(activity);\n\n        return \"redirect:/admin/activity/show\";\n    }\n\n    @RequestMapping(\"/update\")\n    @ResponseBody\n    public Msg updateActivity(Integer goodsid, Integer activityid, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        Goods goods = new Goods();\n        goods.setActivityid(activityid);\n        goods.setGoodsid(goodsid);\n        goodsService.updateGoodsById(goods);\n        return Msg.success(\"更新商品活动成功\");\n    }\n\n    @RequestMapping(\"delete\")\n    public String deleteActivity(Integer activityid, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        activityService.deleteByActivityId(activityid);\n        return \"redirect:/admin/activity/show\";\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/AdminOrderController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.EmailService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.service.OrderService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Controller\n@RequestMapping(\"/admin/order\")\npublic class AdminOrderController {\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n\n    @Autowired\n    private EmailService emailService;\n\n    @RequestMapping(\"/send\")\n    public String sendOrder(@RequestParam(value = \"page\",defaultValue = \"1\")Integer pn, Model model, HttpSession session) {\n\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 2);\n\n        //查询未发货订单\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andIssendEqualTo(false);\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        model.addAttribute(\"sendOrder\", orderList);\n\n        //查询该订单中的商品\n        for (int i = 0; i < orderList.size(); i++) {\n            //获取订单项中的goodsid\n            Order order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            List<OrderItem> orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Integer> goodsIdList = new ArrayList<>();\n\n            List<Goods> goodsList = new ArrayList<>();\n            for (OrderItem orderItem : orderItemList) {\n//                goodsIdList.add(orderItem.getGoodsid());\n                Goods goods = goodsService.selectById(orderItem.getGoodsid());\n                goods.setNum(orderItem.getNum());\n                goodsList.add(goods);\n            }\n\n            //根据goodsid查询商品\n            /*GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            List<Goods> goodsList = goodsService.selectByExample(goodsExample);*/\n            order.setGoodsInfo(goodsList);\n\n            //查询地址\n            Address address = orderService.getAddressByKey(order.getAddressid());\n            order.setAddress(address);\n\n            orderList.set(i, order);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(orderList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"adminAllOrder\";\n    }\n\n    @RequestMapping(\"/sendGoods\")\n    public String sendGoods(Integer orderid, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        Order order = new Order();\n        order.setOrderid(orderid);\n        order.setIssend(true);\n        orderService.updateOrderByKey(order);\n        // 发送信息给用户 管理员已经发货了\n        // emailService.sendEmailToUser();\n        return \"redirect:/admin/order/send\";\n    }\n\n    @RequestMapping(\"/receiver\")\n    public String receiveOrder(@RequestParam(value = \"page\",defaultValue = \"1\")Integer pn, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        //一页显示几个数据\n        PageHelper.startPage(pn, 2);\n\n        //查询未收货订单\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andIssendEqualTo(true).andIsreceiveEqualTo(false);\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        model.addAttribute(\"sendOrder\", orderList);\n\n        //查询该订单中的商品\n        for (int i = 0; i < orderList.size(); i++) {\n            //获取订单项中的goodsid\n            Order order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            List<OrderItem> orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Integer> goodsIdList = new ArrayList<>();\n            /*for (OrderItem orderItem : orderItemList) {\n                goodsIdList.add(orderItem.getGoodsid());\n            }\n*/\n            List<Goods> goodsList = new ArrayList<>();\n            for (OrderItem orderItem : orderItemList) {\n//                goodsIdList.add(orderItem.getGoodsid());\n                Goods goods = goodsService.selectById(orderItem.getGoodsid());\n                goods.setNum(orderItem.getNum());\n                goodsList.add(goods);\n            }\n            //根据goodsid查询商品\n           /* GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            List<Goods> goodsList = goodsService.selectByExample(goodsExample);*/\n            order.setGoodsInfo(goodsList);\n\n            //查询地址\n            Address address = orderService.getAddressByKey(order.getAddressid());\n            order.setAddress(address);\n\n            orderList.set(i, order);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(orderList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"adminOrderReceive\";\n    }\n\n    @RequestMapping(\"/complete\")\n    public String completeOrder(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        //一页显示几个数据\n        PageHelper.startPage(pn, 2);\n\n        //查询已完成订单\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andIssendEqualTo(true).andIsreceiveEqualTo(true).andIscompleteEqualTo(true);\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        model.addAttribute(\"sendOrder\", orderList);\n\n        //查询该订单中的商品\n        for (int i = 0; i < orderList.size(); i++) {\n            //获取订单项中的goodsid\n            Order order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            List<OrderItem> orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Integer> goodsIdList = new ArrayList<>();\n            /*for (OrderItem orderItem : orderItemList) {\n                goodsIdList.add(orderItem.getGoodsid());\n            }*/\n\n            List<Goods> goodsList = new ArrayList<>();\n            for (OrderItem orderItem : orderItemList) {\n//                goodsIdList.add(orderItem.getGoodsid());\n                Goods goods = goodsService.selectById(orderItem.getGoodsid());\n                goods.setNum(orderItem.getNum());\n                goodsList.add(goods);\n            }\n\n            //根据goodsid查询商品\n            /*GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            List<Goods> goodsList = goodsService.selectByExample(goodsExample);*/\n            order.setGoodsInfo(goodsList);\n\n            //查询地址\n            Address address = orderService.getAddressByKey(order.getAddressid());\n            order.setAddress(address);\n\n            orderList.set(i, order);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(orderList, 5);\n        model.addAttribute(\"pageInfo\", page);\n        return \"adminOrderComplete\";\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/ExcelController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\nimport com.zhang.ssmschoolshop.entity.Goods;\nimport com.zhang.ssmschoolshop.entity.GoodsExample;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.util.ExcelUtils;\nimport org.apache.poi.ss.formula.functions.T;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\n\n/**\n * @author codingzx\n * @description\n * @date 2021/7/24 13:20\n */\n\n\n@Controller\n@RequestMapping(\"/admin\")\npublic class ExcelController {\n\n    @Autowired\n    private GoodsService goodsService;\n\n\n    @GetMapping(\"/excel/export\")\n    public String ExportRecord(HttpServletResponse response, HttpServletRequest request) {\n        List<Goods> goodsList = goodsService.selectByExample(new GoodsExample());\n\n        //定义导出的excel名字\n        String excelName = \"资源详情表\";\n\n        //导出用户相关信息\n        new ExcelUtils().export(excelName, goodsList, Goods.class, response);\n        return \"导出资源成功\";\n    }\n\n    @GetMapping(\"/excel/import\")\n    public String ImportRecord(HttpServletResponse response, HttpServletRequest request) {\n        String path = \"D:\\\\github\\\\myproject\\\\SptingbootSchoolShop\\\\import.txt\";\n        //List<Goods> goodsList=(List<Goods>)ExcelUtils.getRecordByTxt(path);\n        // 入库\n        return \"导入资源成功\";\n    }\n\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/GoodsController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.CateService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.util.ImageUtil;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.web.multipart.MultipartFile;\nimport org.springframework.web.servlet.mvc.support.RedirectAttributes;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.awt.*;\nimport java.io.File;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.UUID;\n\n\n@Controller\n@RequestMapping(\"/admin/goods\")\npublic class GoodsController {\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/showjson\")\n    @ResponseBody\n    public Msg getAllGoods(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, HttpServletResponse response, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        //一页显示几个数据\n        PageHelper.startPage(pn, 10);\n\n        List<Goods> employees = goodsService.selectByExample(new GoodsExample());\n\n        //显示几个页号\n        PageInfo page = new PageInfo(employees, 5);\n\n        model.addAttribute(\"pageInfo\", page);\n\n        return Msg.success(\"查询成功!\").add(\"pageInfo\", page);\n    }\n\n    @RequestMapping(\"/show\")\n    public String goodsManage(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, HttpServletResponse response, Model model, HttpSession session) throws IOException {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        List<Category> categoryList = cateService.selectByExample(new CategoryExample());\n        model.addAttribute(\"categoryList\", categoryList);\n\n        return \"adminAllGoods\";\n    }\n\n    @RequestMapping(\"/add\")\n    public String showAdd(@ModelAttribute(\"succeseMsg\") String msg, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        if (!msg.equals(\"\")) {\n            model.addAttribute(\"msg\", msg);\n        }\n\n        List<Category> categoryList = cateService.selectByExample(new CategoryExample());\n        model.addAttribute(\"categoryList\", categoryList);\n\n\n        //还需要查询分类传给addGoods页面\n        return \"addGoods\";\n    }\n\n    @RequestMapping(value = \"/update\", method = RequestMethod.POST)\n    @ResponseBody\n    public Msg updateGoods(Goods goods, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        /* goods.setGoodsid(goodsid);*/\n        goodsService.updateGoodsById(goods);\n        return Msg.success(\"更新成功!\");\n    }\n\n    @RequestMapping(value = \"/delete/{goodsid}\", method = RequestMethod.DELETE)\n    @ResponseBody\n    public Msg deleteGoods(@PathVariable(\"goodsid\") Integer goodsid) {\n        goodsService.deleteGoodsById(goodsid);\n        return Msg.success(\"删除成功!\");\n    }\n\n    @RequestMapping(\"/addGoodsSuccess\")\n    public String addGoods(Goods goods,\n                           @RequestParam MultipartFile[] fileToUpload,\n                           HttpServletRequest request,\n                           HttpServletResponse response,\n                           RedirectAttributes redirectAttributes) throws IOException {\n        /*goods.setCategory(1);*/\n        goods.setUptime(new Date());\n        goods.setActivityid(1);\n        goodsService.addGoods(goods);\n        for (MultipartFile multipartFile : fileToUpload) {\n            String fileName = goods.getGoodsname()+ multipartFile.getOriginalFilename();\n            if (multipartFile != null) {\n               String ImagePath= ImageUtil.imagePath(multipartFile,fileName);\n               System.out.println(\"最后存入数据的图片名字为:\"+ImagePath);\n                //把图片路径存入数据库中\n              goodsService.addImagePath(new ImagePath(null, goods.getGoodsid(), ImagePath));\n\n            }\n        }\n\n        redirectAttributes.addFlashAttribute(\"succeseMsg\", \"商品添加成功!\");\n\n        return \"redirect:/admin/goods/add\";\n    }\n\n    @RequestMapping(\"/addCategory\")\n    public String addcategory(@ModelAttribute(\"succeseMsg\") String msg, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or();\n        List<Category> categoryList;\n        categoryList = cateService.selectByExample(categoryExample);\n        model.addAttribute(\"categoryList\", categoryList);\n        if (!msg.equals(\"\")) {\n            model.addAttribute(\"msg\", msg);\n        }\n        return \"addCategory\";\n    }\n\n    @Autowired\n    private CateService cateService;\n\n    @RequestMapping(\"/addCategoryResult\")\n    public String addCategoryResult(Category category, Model addCategoryResult, RedirectAttributes redirectAttributes) {\n        List<Category> categoryList = new ArrayList<>();\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or().andCatenameEqualTo(category.getCatename());\n        categoryList = cateService.selectByExample(categoryExample);\n        if (!categoryList.isEmpty()) {\n            redirectAttributes.addAttribute(\"succeseMsg\", \"分类已存在\");\n            return \"redirect:/admin/goods/addCategory\";\n        } else {\n            cateService.insertSelective(category);\n            redirectAttributes.addFlashAttribute(\"succeseMsg\", \"分类添加成功!\");\n            return \"redirect:/admin/goods/addCategory\";\n        }\n    }\n\n    @RequestMapping(\"/saveCate\")\n    @ResponseBody\n    public Msg saveCate(Category category) {\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or().andCatenameEqualTo(category.getCatename());\n        List<Category> categoryList = cateService.selectByExample(categoryExample);\n        if (categoryList.isEmpty()) {\n            cateService.updateByPrimaryKeySelective(category);\n            return Msg.success(\"更新成功\");\n        } else return Msg.success(\"名字已经存在\");\n    }\n\n    @RequestMapping(\"/deleteCate\")\n    @ResponseBody\n    public Msg deleteCate(Category category) {\n        cateService.deleteByPrimaryKey(category.getCateid());\n        return Msg.success(\"删除成功\");\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/LoginController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\n\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.service.AdminService;\nimport com.zhang.ssmschoolshop.util.Md5Util;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\n\n@Controller\n@RequestMapping(\"/admin\")\npublic class LoginController {\n\n    @Autowired\n    private AdminService adminService;\n\n    @RequestMapping(\"/login\")\n    public String adminLogin() {\n        return \"adminLogin\";\n    }\n\n    @RequestMapping(\"/confirmLogin\")\n    public String confirmLogin(Admin admin, Model model, HttpServletRequest request) {\n        admin.setPassword(Md5Util.MD5Encode(admin.getPassword(),\"utf-8\"));\n        Admin selectAdmin = adminService.selectByName(admin);\n        if (selectAdmin == null) {\n            model.addAttribute(\"errorMsg\", \"用户名或密码错误\");\n            return \"adminLogin\";\n        } else {\n            HttpSession session = request.getSession();\n            session.setAttribute(\"admin\", selectAdmin);\n            return \"redirect:/admin/user/show\";\n        }\n    }\n\n    @RequestMapping(\"/logout\")\n    public String adminLogout(HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        session.removeAttribute(\"admin\");\n        return \"redirect:/admin/login\";\n    }\n\n    /*@RequestMapping(\"/index\")\n    public String showAdminIndex() {\n        return \"user\";\n    }*/\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/admin/UserController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\n\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\n\n\n@Controller\n@RequestMapping(\"/admin/user\")\npublic class UserController {\n\n    @Autowired\n    private UserService userService;\n\n    @RequestMapping(\"/showjson\")\n    @ResponseBody\n    public Msg getAllGoods(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, HttpServletResponse response, Model model) {\n        //一页显示几个数据\n        PageHelper.startPage(pn, 10);\n        List<User> userList = userService.selectByExample(new UserExample());\n        //显示几个页号\n        PageInfo page = new PageInfo(userList,5);\n\n       /* model.addAttribute(\"pageInfo\", page);*/\n\n        return Msg.success(\"查询成功!\").add(\"pageInfo\", page);\n    }\n\n    @RequestMapping(\"/show\")\n    public String userManage() {\n        return \"userManage\";\n    }\n\n    @RequestMapping(value = \"/delete/{userid}\", method = RequestMethod.DELETE)\n    @ResponseBody\n    public Msg deleteUser(@PathVariable(\"userid\")Integer userid) {\n//        goodsService.deleteGoodsById(goodsid);\n        userService.deleteUserById(userid);\n        return Msg.success(\"删除成功!\");\n    }\n\n\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/CartController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.service.ShopCartService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\nimport java.util.Date;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Controller\npublic class CartController {\n\n    @Autowired\n    private ShopCartService shopCartService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/addCart\")\n    public String addCart(ShopCart shopCart, HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return \"redirect:/login\";\n        }\n        //判断是否已经加入购物车\n        ShopCart shopCart1 = shopCartService.selectCartByKey(new ShopCartKey(user.getUserid(), shopCart.getGoodsid()));\n        if (shopCart1 != null) {\n            return \"redirect:/showcart\";\n        }\n\n        //用户\n        shopCart.setUserid(user.getUserid());\n\n        //加入时间\n        shopCart.setCatedate(new Date());\n\n        shopCartService.addShopCart(shopCart);\n\n        //返回到购物车页面\n        return \"redirect:/showcart\";\n    }\n\n    @RequestMapping(\"/showcart\")\n    public String showCart(HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return \"redirect:/login\";\n        }\n        return \"shopcart\";\n    }\n\n    @RequestMapping(\"/cartjson\")\n    @ResponseBody\n    public Msg getCart(HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"请先登录\");\n        }\n\n        //获取当前用户的购物车信息\n        ShopCartExample shopCartExample = new ShopCartExample();\n        shopCartExample.or().andUseridEqualTo(user.getUserid());\n        List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);\n\n        //获取购物车中的商品信息\n        List<Goods> goodsAndImage = new ArrayList<>();\n        for (ShopCart cart:shopCart) {\n            Goods goods = goodsService.selectById(cart.getGoodsid());\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n            goods.setImagePaths(imagePathList);\n            goods.setNum(cart.getGoodsnum());\n            goodsAndImage.add(goods);\n        }\n\n        return Msg.success(\"查询成功\").add(\"shopcart\",goodsAndImage);\n    }\n\n    @RequestMapping(value = \"/deleteCart/{goodsid}\", method = RequestMethod.DELETE)\n    @ResponseBody\n    public Msg deleteCart(@PathVariable(\"goodsid\")Integer goodsid, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"请先登录\");\n        }\n\n        shopCartService.deleteByKey(new ShopCartKey(user.getUserid(), goodsid));\n        return Msg.success(\"删除成功\");\n    }\n\n    @RequestMapping(\"/update\")\n    @ResponseBody\n    public Msg updateCart(Integer goodsid,Integer num,HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        ShopCart shopCart = new ShopCart();\n        shopCart.setUserid(user.getUserid());\n        shopCart.setGoodsid(goodsid);\n        shopCart.setGoodsnum(num);\n        shopCartService.updateCartByKey(shopCart);\n        return Msg.success(\"更新购物车成功\");\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/CustomerController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.AddressService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.service.OrderService;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport com.zhang.ssmschoolshop.util.Md5Util;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n@Controller\npublic class CustomerController {\n\n    @RequestMapping(\"/login\")\n    public String loginView() {\n        return \"login\";\n    }\n\n    @Autowired\n    private UserService userService;\n\n    @RequestMapping(\"/register\")\n    public String register() {\n        return \"register\";\n    }\n\n    @RequestMapping(\"/registerresult\")\n    public String registerResult(User user, Model registerResult) {\n        List<User> userList = new ArrayList<>();\n        user.setPassword(Md5Util.MD5Encode(user.getPassword(), \"utf-8\"));\n        UserExample userExample = new UserExample();\n        userExample.or().andUsernameLike(user.getUsername());\n        userList = userService.selectByExample(userExample);\n        if (!userList.isEmpty()) {\n            registerResult.addAttribute(\"errorMsg\", \"用户名被占用\");\n            return \"register\";\n        } else {\n            Date RegTime = new Date();\n            user.setRegtime(RegTime);\n            userService.insertSelective(user);\n            return \"redirect:/login\";\n        }\n    }\n\n\n    @RequestMapping(\"/loginconfirm\")\n    public String loginConfirm(User user, Model loginResult, HttpServletRequest request, @RequestParam(\"confirmlogo\") String confirmlogo) {\n        System.out.println(\"传进来的用户帐号和密码为:\" + user);\n        //进行用户密码MD5加密验证\n        user.setPassword(Md5Util.MD5Encode(user.getPassword(), \"UTF-8\"));\n        HttpSession session = request.getSession();\n        String verificationCode = (String) session.getAttribute(\"certCode\");\n        if (!confirmlogo.equals(verificationCode)) {\n            loginResult.addAttribute(\"errorMsg\", \"验证码错误\");\n            return \"login\";\n\n        }\n        List<User> userList = new ArrayList<User>();\n        UserExample userExample = new UserExample();\n        userExample.or().andUsernameEqualTo(user.getUsername()).andPasswordEqualTo(user.getPassword());\n        userList = userService.selectByExample(userExample);\n        if (!userList.isEmpty()) {\n            session.setAttribute(\"user\", userList.get(0));\n            return \"redirect:/main\";\n        } else {\n            loginResult.addAttribute(\"errorMsg\", \"用户名与密码不匹配\");\n            return \"login\";\n        }\n    }\n\n    @RequestMapping(\"/information\")\n    public String information(Model userModel, HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        User user;\n        Integer userId;\n        user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n        userId = user.getUserid();\n        user = userService.selectByPrimaryKey(userId);\n        userModel.addAttribute(\"user\", user);\n        return \"information\";\n    }\n\n    @RequestMapping(\"/saveInfo\")\n    @ResponseBody\n    public Msg saveInfo(String name, String email, String telephone, HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        UserExample userExample = new UserExample();\n        User user, updateUser = new User();\n        List<User> userList = new ArrayList<>();\n        Integer userid;\n        user = (User) session.getAttribute(\"user\");\n        userid = user.getUserid();\n        userExample.or().andUsernameEqualTo(name);\n        userList = userService.selectByExample(userExample);\n        if (userList.isEmpty()) {\n            updateUser.setUserid(userid);\n            updateUser.setUsername(name);\n            updateUser.setEmail(email);\n            updateUser.setTelephone(telephone);\n            userService.updateByPrimaryKeySelective(updateUser);\n            return Msg.success(\"更新成功\");\n        } else {\n            return Msg.fail(\"更新失败\");\n        }\n    }\n\n    @Autowired\n    private AddressService addressService;\n\n    @RequestMapping(\"/info/address\")\n    public String address(HttpServletRequest request, Model addressModel) {\n        HttpSession session = request.getSession();\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n        AddressExample addressExample = new AddressExample();\n        addressExample.or().andUseridEqualTo(user.getUserid());\n        List<Address> addressList = addressService.getAllAddressByExample(addressExample);\n        addressModel.addAttribute(\"addressList\", addressList);\n        return \"address\";\n    }\n\n    @RequestMapping(\"/saveAddr\")\n    @ResponseBody\n    public Msg saveAddr(Address address) {\n\n        addressService.updateByPrimaryKeySelective(address);\n        return Msg.success(\"修改成功\");\n    }\n\n    @RequestMapping(\"/deleteAddr\")\n    @ResponseBody\n    public Msg deleteAddr(Address address) {\n        addressService.deleteByPrimaryKey(address.getAddressid());\n        return Msg.success(\"删除成功\");\n    }\n\n    @RequestMapping(\"/insertAddr\")\n    @ResponseBody\n    public Msg insertAddr(Address address, HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        User user = new User();\n        user = (User) session.getAttribute(\"user\");\n        address.setUserid(user.getUserid());\n        addressService.insertSelective(address);\n        return Msg.success(\"添加成功\");\n    }\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/info/list\")\n    public String list(HttpServletRequest request, Model orderModel) {\n\n        HttpSession session = request.getSession();\n        User user;\n        user = (User) session.getAttribute(\"user\");\n\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andUseridEqualTo(user.getUserid());\n\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        orderModel.addAttribute(\"orderList\", orderList);\n        Order order;\n        OrderItem orderItem;\n        List<OrderItem> orderItemList = new ArrayList<>();\n        Goods goods;\n        Address address;\n        for (Integer i = 0; i < orderList.size(); i++) {\n            order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Goods> goodsList = new ArrayList<>();\n            List<Integer> goodsIdList = new ArrayList<>();\n            for (Integer j = 0; j < orderItemList.size(); j++) {\n                orderItem = orderItemList.get(j);\n                goodsIdList.add(orderItem.getGoodsid());\n            }\n            GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            goodsList = goodsService.selectByExample(goodsExample);\n            order.setGoodsInfo(goodsList);\n            address = addressService.selectByPrimaryKey(order.getAddressid());\n            order.setAddress(address);\n            orderList.set(i, order);\n        }\n        orderModel.addAttribute(\"orderList\", orderList);\n\n        return \"list\";\n    }\n\n\n    @RequestMapping(\"/deleteList\")\n    @ResponseBody\n    public Msg deleteList(Order order) {\n        orderService.deleteById(order.getOrderid());\n        return Msg.success(\"删除成功\");\n    }\n\n    /**\n     * 收藏商品\n     * @param pn\n     * @param request\n     * @param model\n     * @return\n     */\n    @RequestMapping(\"/info/favorite\")\n    public String showFavorite(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, HttpServletRequest request, Model model) {\n        HttpSession session = request.getSession();\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 16);\n\n        FavoriteExample favoriteExample = new FavoriteExample();\n        favoriteExample.or().andUseridEqualTo(user.getUserid());\n        List<Favorite> favoriteList = goodsService.selectFavByExample(favoriteExample);\n\n        List<Integer> goodsIdList = new ArrayList<Integer>();\n        for (Favorite tmp : favoriteList) {\n            goodsIdList.add(tmp.getGoodsid());\n        }\n\n        GoodsExample goodsExample = new GoodsExample();\n        List<Goods> goodsList = new ArrayList<>();\n        if (!goodsIdList.isEmpty()) {\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            goodsList = goodsService.selectByExample(goodsExample);\n        }\n\n        //获取图片地址\n        for (int i = 0; i < goodsList.size(); i++) {\n            Goods goods = goodsList.get(i);\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n\n            goods.setImagePaths(imagePathList);\n\n            //判断是否收藏\n            goods.setFav(true);\n\n            goodsList.set(i, goods);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(goodsList, 5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"favorite\";\n    }\n\n    @RequestMapping(\"/savePsw\")\n    @ResponseBody\n    public Msg savePsw(String Psw, HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        User user = (User) session.getAttribute(\"user\");\n        user.setPassword(Md5Util.MD5Encode(Psw, \"UTF-8\"));\n        userService.updateByPrimaryKeySelective(user);\n        return Msg.success(\"修改密码成功\");\n    }\n\n    @RequestMapping(\"/finishList\")\n    @ResponseBody\n    public Msg finishiList(Integer orderid) {\n        Order order = orderService.selectByPrimaryKey(orderid);\n        order.setIsreceive(true);\n        order.setIscomplete(true);\n        orderService.updateOrderByKey(order);\n        return Msg.success(\"完成订单成功\");\n    }\n\n    @RequestMapping(\"/logout\")\n    public String logout(HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        session.removeAttribute(\"user\");\n        return \"redirect:/login\";\n    }\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/FrontGoodsController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.*;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\nimport java.util.Date;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@Controller\npublic class FrontGoodsController {\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @Autowired\n    private CateService cateService;\n\n    @Autowired\n    private CommentService commentService;\n\n    @Autowired\n    private UserService userService;\n\n    @Autowired\n    private ActivityService activityService;\n\n    @RequestMapping(value = \"/detail\",method = RequestMethod.GET)\n    public String detailGoods(Integer goodsid, Model model, HttpSession session) {\n\n        if(goodsid == null) {\n            return \"redirect:/main\";\n        }\n\n        User user = (User) session.getAttribute(\"user\");\n\n        //要传回的数据存在HashMap中\n        Map<String,Object> goodsInfo = new HashMap<String,Object>();\n\n        //查询商品的基本信息\n        Goods goods = goodsService.selectById(goodsid);\n\n        if (user == null) {\n            goods.setFav(false);\n        } else {\n            Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(user.getUserid(), goodsid));\n            if (favorite == null) {\n                goods.setFav(false);\n            } else {\n                goods.setFav(true);\n            }\n        }\n\n        //查询商品类别\n        Category category = cateService.selectById(goods.getCategory());\n\n        //商品图片\n        List<ImagePath> imagePath = goodsService.findImagePath(goodsid);\n\n        //商品评论\n\n        //商品折扣信息\n        Activity activity = activityService.selectByKey(goods.getActivityid());\n        goods.setActivity(activity);\n\n        //返回数据\n        goodsInfo.put(\"goods\", goods);\n        goodsInfo.put(\"cate\", category);\n        goodsInfo.put(\"image\", imagePath);\n        model.addAttribute(\"goodsInfo\",goodsInfo);\n//        model.addAllAttributes(goodsInfo);\n\n        //评论信息\n        CommentExample commentExample=new CommentExample();\n        commentExample.or().andGoodsidEqualTo(goods.getGoodsid());\n        List<Comment> commentList=commentService.selectByExample(commentExample);\n        for (Integer i=0;i<commentList.size();i++)\n        {\n            Comment comment=commentList.get(i);\n            User commentUser=userService.selectByPrimaryKey(comment.getUserid());\n            comment.setUserName(commentUser.getUsername());\n            commentList.set(i,comment);\n        }\n        model.addAttribute(\"commentList\",commentList);\n\n        return \"detail\";\n    }\n\n    @RequestMapping(value = \"/search\", method = RequestMethod.GET)\n    public String searchGoods(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, String keyword, Model model, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 16);\n\n        //查询数据\n        GoodsExample goodsExample = new GoodsExample();\n        goodsExample.or().andGoodsnameLike(\"%\" + keyword + \"%\");\n        List<Goods> goodsList = goodsService.selectByExample(goodsExample);\n\n        //获取图片地址\n        for (int i = 0; i < goodsList.size(); i++) {\n            Goods goods = goodsList.get(i);\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n\n            goods.setImagePaths(imagePathList);\n\n            //判断是否收藏\n            if (user == null) {\n                goods.setFav(false);\n            } else {\n                Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(user.getUserid(), goods.getGoodsid()));\n                if (favorite == null) {\n                    goods.setFav(false);\n                } else {\n                    goods.setFav(true);\n                }\n            }\n\n            goodsList.set(i, goods);\n        }\n\n\n        //显示几个页号\n        PageInfo page = new PageInfo(goodsList,5);\n        model.addAttribute(\"pageInfo\", page);\n        model.addAttribute(\"keyword\", keyword);\n\n        return \"search\";\n    }\n\n    @RequestMapping(\"/collect\")\n    @ResponseBody\n    public Msg collectGoods(Integer goodsid, HttpSession session) {\n        //取登录用户信息,未登录重定向至登录页面\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"收藏失败\");\n        }\n\n        //添加收藏\n        Favorite favorite = new Favorite();\n        favorite.setCollecttime(new Date());\n        favorite.setGoodsid(goodsid);\n        favorite.setUserid(user.getUserid());\n\n        goodsService.addFavorite(favorite);\n\n        return Msg.success(\"收藏成功\");\n    }\n\n    @RequestMapping(\"/deleteCollect\")\n    @ResponseBody\n    public Msg deleteFavGoods(Integer goodsid, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return Msg.fail(\"取消收藏失败\");\n        }\n\n        //删除收藏\n        goodsService.deleteFavByKey(new FavoriteKey(user.getUserid(),goodsid));\n\n        return Msg.success(\"取消收藏成功\");\n    }\n\n    @RequestMapping(\"/category\")\n    public String getCateGoods(String cate, @RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, Model model, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 16);\n\n        //查询分类id\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or().andCatenameLike(cate);\n        List<Category> categoryList = cateService.selectByExample(categoryExample);\n\n        //获取查出的类别id\n        List<Integer> cateId = new ArrayList<>();\n        for (Category category : categoryList) {\n            cateId.add(category.getCateid());\n        }\n\n        //查询数据\n        GoodsExample goodsExample = new GoodsExample();\n        goodsExample.or().andDetailcateLike(\"%\" + cate + \"%\");\n        if (!cateId.isEmpty()) {\n            goodsExample.or().andCategoryIn(cateId);\n        }\n        List<Goods> goodsList = goodsService.selectByExample(goodsExample);\n\n        //获取图片地址\n        for (int i = 0; i < goodsList.size(); i++) {\n            Goods goods = goodsList.get(i);\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n\n            goods.setImagePaths(imagePathList);\n\n            //判断是否收藏\n            if (user == null) {\n                goods.setFav(false);\n            } else {\n                Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(user.getUserid(), goods.getGoodsid()));\n                if (favorite == null) {\n                    goods.setFav(false);\n                } else {\n                    goods.setFav(true);\n                }\n            }\n\n            goodsList.set(i, goods);\n        }\n\n\n        //显示几个页号\n        PageInfo page = new PageInfo(goodsList,5);\n        model.addAttribute(\"pageInfo\", page);\n        model.addAttribute(\"cate\", cate);\n        return \"category\";\n    }\n\n\n\n    @RequestMapping(\"/comment\")\n    @ResponseBody\n    public Msg comment(Comment comment, HttpServletRequest request){\n        HttpSession session=request.getSession();\n        User user=(User) session.getAttribute(\"user\");\n        if (user == null) {\n            return Msg.fail(\"评论失败\");\n        }\n        comment.setUserid(user.getUserid());\n        Date date=new Date();\n        comment.setCommenttime(date);\n        commentService.insertSelective(comment);\n        return Msg.success(\"评论成功\");\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/MainController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.CateService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Controller\npublic class MainController {\n\n    @Autowired\n    private CateService cateService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n\n    @RequestMapping(\"/\")\n    public String showAdmin(Model model, HttpSession session) {\n        Integer userid;\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            userid = null;\n        } else {\n            userid = user.getUserid();\n        }\n\n        //数码分类\n        List<Goods> digGoods = getCateGoods(\"数码\", userid);\n        model.addAttribute(\"digGoods\", digGoods);\n\n        //家电\n        List<Goods> houseGoods = getCateGoods(\"家电\", userid);\n        model.addAttribute(\"houseGoods\", houseGoods);\n\n        //服饰\n        List<Goods> colGoods = getCateGoods(\"服饰\", userid);\n        model.addAttribute(\"colGoods\", colGoods);\n\n        //书籍\n        List<Goods> bookGoods = getCateGoods(\"书籍\", userid);\n        model.addAttribute(\"bookGoods\", bookGoods);\n\n        return \"main\";\n    }\n\n\n\n\n    @RequestMapping(\"/main\")\n    public String showAllGoods(Model model, HttpSession session) {\n        Integer userid;\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            userid = null;\n        } else {\n            userid = user.getUserid();\n        }\n        //数码分类\n        List<Goods> digGoods = getCateGoods(\"数码\", userid);\n        model.addAttribute(\"digGoods\", digGoods);\n        //家电\n        List<Goods> houseGoods = getCateGoods(\"家电\", userid);\n        model.addAttribute(\"houseGoods\", houseGoods);\n        //服饰\n        List<Goods> colGoods = getCateGoods(\"服饰\", userid);\n        model.addAttribute(\"colGoods\", colGoods);\n        //书籍\n        List<Goods> bookGoods = getCateGoods(\"书籍\", userid);\n        model.addAttribute(\"bookGoods\", bookGoods);\n\n        return \"main\";\n    }\n\n    public List<Goods> getCateGoods(String cate, Integer userid) {\n        //查询分类\n        CategoryExample digCategoryExample = new CategoryExample();\n        digCategoryExample.or().andCatenameLike(cate);\n        List<Category> digCategoryList = cateService.selectByExample(digCategoryExample);\n\n        if (digCategoryList.size() == 0) {\n            return null;\n        }\n\n        //查询属于刚查到的分类的商品\n        GoodsExample digGoodsExample = new GoodsExample();\n        List<Integer> digCateId = new ArrayList<Integer>();\n        for (Category tmp:digCategoryList) {\n            digCateId.add(tmp.getCateid());\n        }\n        digGoodsExample.or().andCategoryIn(digCateId);\n\n        List<Goods> goodsList = goodsService.selectByExampleLimit(digGoodsExample);\n\n        List<Goods> goodsAndImage = new ArrayList<>();\n        //获取每个商品的图片\n        for (Goods goods:goodsList) {\n            //判断是否为登录状态\n            if (userid == null) {\n                goods.setFav(false);\n            } else {\n                Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(userid, goods.getGoodsid()));\n                if (favorite == null) {\n                    goods.setFav(false);\n                } else {\n                    goods.setFav(true);\n                }\n            }\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n            goods.setImagePaths(imagePathList);\n            goodsAndImage.add(goods);\n        }\n        return goodsAndImage;\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/OrderController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.*;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.mail.MailException;\nimport org.springframework.mail.SimpleMailMessage;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpSession;\nimport java.time.LocalDate;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n\n@Controller\npublic class OrderController {\n\n    private static final Logger log = LoggerFactory.getLogger(OrderController.class);\n\n    /*@Value(\"#{addressService}\")*/\n    @Autowired\n    private AddressService addressService;\n\n    @Autowired\n    private ShopCartService shopCartService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private ActivityService activityService;\n\n    @Autowired\n    private EmailService emailService;\n\n    @RequestMapping(\"/order\")\n    public String showOrder(HttpSession session, Model model) {\n\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        //查询当前用户的收货地址\n        AddressExample addressExample = new AddressExample();\n        addressExample.or().andUseridEqualTo(user.getUserid());\n        List<Address> addressList = addressService.getAllAddressByExample(addressExample);\n\n        model.addAttribute(\"address\", addressList);\n\n        //订单信息\n        //获取当前用户的购物车信息\n        ShopCartExample shopCartExample = new ShopCartExample();\n        shopCartExample.or().andUseridEqualTo(user.getUserid());\n        List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);\n\n        //获取购物车中的商品信息\n        List<Goods> goodsAndImage = new ArrayList<>();\n\n        Float totalPrice = new Float(0);\n        Integer oldTotalPrice = 0;\n\n        for (ShopCart cart : shopCart) {\n            //分别从购物车列表中获取每个商品\n            Goods goods = goodsService.selectById(cart.getGoodsid());\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n            goods.setImagePaths(imagePathList);\n            goods.setNum(cart.getGoodsnum());\n\n            //活动信息\n            Activity activity = activityService.selectByKey(goods.getActivityid());\n            goods.setActivity(activity);\n\n            //处理折扣信息\n            //如果商品折扣不为1\n            if (activity.getDiscount() != 1) {\n                goods.setNewPrice(goods.getPrice() * goods.getNum() * activity.getDiscount());\n                System.out.println(\"价格为：\" + goods.getPrice() * goods.getNum() * activity.getDiscount());\n            } else if (activity.getFullnum() != null) {\n                System.out.println(\"进入第二层方法\");\n                if (goods.getNum() >= activity.getFullnum()) {\n                    goods.setNewPrice((float) (goods.getPrice() * (goods.getNum() - activity.getReducenum())));\n                } else {\n                    goods.setNewPrice((float) (goods.getPrice() * goods.getNum()));\n                }\n            } else if (activity.getFullprice() != null && activity.getReducenum() != null) {\n                if ((goods.getNum() * goods.getNum()) > activity.getFullprice()) {\n                    goods.setNewPrice((float) (goods.getPrice() * goods.getNum() - activity.getReducenum()));\n                } else {\n                    goods.setNewPrice((float) (goods.getPrice() * goods.getNum()));\n\n                }\n\n            } else {\n                goods.setNewPrice((float) (goods.getPrice() * goods.getNum()));\n            }\n            totalPrice = totalPrice + goods.getNewPrice();\n            oldTotalPrice = oldTotalPrice + goods.getNum() * goods.getPrice();\n            goodsAndImage.add(goods);\n        }\n\n        model.addAttribute(\"totalPrice\", totalPrice);\n        model.addAttribute(\"oldTotalPrice\", oldTotalPrice);\n        model.addAttribute(\"goodsAndImage\", goodsAndImage);\n\n        return \"orderConfirm\";\n    }\n\n    @RequestMapping(\"/orderFinish\")\n    @ResponseBody\n    public Msg orderFinish(Float oldPrice, Float newPrice, Boolean isPay, Integer addressid, HttpSession session) {\n\n        User user = (User) session.getAttribute(\"user\");\n\n        //获取订单信息\n        ShopCartExample shopCartExample = new ShopCartExample();\n        shopCartExample.or().andUseridEqualTo(user.getUserid());\n        List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);\n\n        //删除购物车\n        for (ShopCart cart : shopCart) {\n            shopCartService.deleteByKey(new ShopCartKey(cart.getUserid(), cart.getGoodsid()));\n        }\n\n        //把订单信息写入数据库\n        Order order = new Order(null, user.getUserid(), new Date(), oldPrice, newPrice, isPay, false, false, false, addressid, null, null);\n        orderService.insertOrder(order);\n        //插入的订单号\n        Integer orderId = order.getOrderid();\n\n        //把订单项写入orderitem表中\n        for (ShopCart cart : shopCart) {\n            orderService.insertOrderItem(new OrderItem(null, orderId, cart.getGoodsid(), cart.getGoodsnum()));\n        }\n        // 购买成功通知管理员\n       // emailService.sendEmailToAdmin();\n        return Msg.success(\"购买成功\");\n    }\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/controller/front/VerificationCodeImgController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.servlet.ModelAndView;\n\n\n@Controller\npublic class VerificationCodeImgController {\n    @RequestMapping(\"/verificationcodeimg\")\n    public ModelAndView verificationcodeimg(){\n        ModelAndView verificationcodeimg=new ModelAndView();\n        verificationcodeimg.setViewName(\"verificationcodeimg\");\n        return verificationcodeimg;\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/ActivityMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ActivityMapper {\n    long countByExample(ActivityExample example);\n\n    int deleteByExample(ActivityExample example);\n\n    int deleteByPrimaryKey(Integer activityid);\n\n    int insert(Activity record);\n\n    int insertSelective(Activity record);\n\n    List<Activity> selectByExample(ActivityExample example);\n\n    Activity selectByPrimaryKey(Integer activityid);\n\n    int updateByExampleSelective(@Param(\"record\") Activity record, @Param(\"example\") ActivityExample example);\n\n    int updateByExample(@Param(\"record\") Activity record, @Param(\"example\") ActivityExample example);\n\n    int updateByPrimaryKeySelective(Activity record);\n\n    int updateByPrimaryKey(Activity record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/AddressMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Address;\nimport com.zhang.ssmschoolshop.entity.AddressExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface AddressMapper {\n    long countByExample(AddressExample example);\n\n    int deleteByExample(AddressExample example);\n\n    int deleteByPrimaryKey(Integer addressid);\n\n    int insert(Address record);\n\n    int insertSelective(Address record);\n\n    List<Address> selectByExample(AddressExample example);\n\n    Address selectByPrimaryKey(Integer addressid);\n\n    int updateByExampleSelective(@Param(\"record\") Address record, @Param(\"example\") AddressExample example);\n\n    int updateByExample(@Param(\"record\") Address record, @Param(\"example\") AddressExample example);\n\n    int updateByPrimaryKeySelective(Address record);\n\n    int updateByPrimaryKey(Address record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/AdminMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\nimport org.apache.ibatis.annotations.Param;\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.entity.AdminExample;\n\nimport java.util.List;\n\npublic interface AdminMapper {\n    long countByExample(AdminExample example);\n\n    int deleteByExample(AdminExample example);\n\n    int deleteByPrimaryKey(Integer adminid);\n\n    int insert(Admin record);\n\n    int insertSelective(Admin record);\n\n    List<Admin> selectByExample(AdminExample example);\n\n    Admin selectByPrimaryKey(Integer adminid);\n\n    Admin selectByName(Admin admin);\n\n    int updateByExampleSelective(@Param(\"record\") Admin record, @Param(\"example\") AdminExample example);\n\n    int updateByExample(@Param(\"record\") Admin record, @Param(\"example\") AdminExample example);\n\n    int updateByPrimaryKeySelective(Admin record);\n\n    int updateByPrimaryKey(Admin record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/CategoryMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Category;\nimport com.zhang.ssmschoolshop.entity.CategoryExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface CategoryMapper {\n    long countByExample(CategoryExample example);\n\n    int deleteByExample(CategoryExample example);\n\n    int deleteByPrimaryKey(Integer cateid);\n\n    int insert(Category record);\n\n    int insertSelective(Category record);\n\n    List<Category> selectByExample(CategoryExample example);\n\n    List<Category> selectByExampleLimit(CategoryExample example);\n\n    Category selectByPrimaryKey(Integer cateid);\n\n    int updateByExampleSelective(@Param(\"record\") Category record, @Param(\"example\") CategoryExample example);\n\n    int updateByExample(@Param(\"record\") Category record, @Param(\"example\") CategoryExample example);\n\n    int updateByPrimaryKeySelective(Category record);\n\n    int updateByPrimaryKey(Category record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/CommentMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Comment;\nimport com.zhang.ssmschoolshop.entity.CommentExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface CommentMapper {\n    long countByExample(CommentExample example);\n\n    int deleteByExample(CommentExample example);\n\n    int deleteByPrimaryKey(Integer commentid);\n\n    int insert(Comment record);\n\n    int insertSelective(Comment record);\n\n    List<Comment> selectByExample(CommentExample example);\n\n    Comment selectByPrimaryKey(Integer commentid);\n\n    int updateByExampleSelective(@Param(\"record\") Comment record, @Param(\"example\") CommentExample example);\n\n    int updateByExample(@Param(\"record\") Comment record, @Param(\"example\") CommentExample example);\n\n    int updateByPrimaryKeySelective(Comment record);\n\n    int updateByPrimaryKey(Comment record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/FavoriteMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Favorite;\nimport com.zhang.ssmschoolshop.entity.FavoriteExample;\nimport com.zhang.ssmschoolshop.entity.FavoriteKey;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface FavoriteMapper {\n    long countByExample(FavoriteExample example);\n\n    int deleteByExample(FavoriteExample example);\n\n    int deleteByPrimaryKey(FavoriteKey key);\n\n    int insert(Favorite record);\n\n    int insertSelective(Favorite record);\n\n    List<Favorite> selectByExample(FavoriteExample example);\n\n    Favorite selectByPrimaryKey(FavoriteKey key);\n\n    int updateByExampleSelective(@Param(\"record\") Favorite record, @Param(\"example\") FavoriteExample example);\n\n    int updateByExample(@Param(\"record\") Favorite record, @Param(\"example\") FavoriteExample example);\n\n    int updateByPrimaryKeySelective(Favorite record);\n\n    int updateByPrimaryKey(Favorite record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/GoodsMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\nimport org.apache.ibatis.annotations.Param;\nimport com.zhang.ssmschoolshop.entity.Goods;\nimport com.zhang.ssmschoolshop.entity.GoodsExample;\n\nimport java.util.List;\n\npublic interface GoodsMapper {\n    long countByExample(GoodsExample example);\n\n    int deleteByExample(GoodsExample example);\n\n    int deleteByPrimaryKey(Integer goodsid);\n\n    int insert(Goods record);\n\n    int insertSelective(Goods record);\n\n    List<Goods> selectByExampleWithBLOBs(GoodsExample example);\n\n    List<Goods> selectByExample(GoodsExample example);\n\n    Goods selectByPrimaryKey(Integer goodsid);\n\n    int updateByExampleSelective(@Param(\"record\") Goods record, @Param(\"example\") GoodsExample example);\n\n    int updateByExampleWithBLOBs(@Param(\"record\") Goods record, @Param(\"example\") GoodsExample example);\n\n    int updateByExample(@Param(\"record\") Goods record, @Param(\"example\") GoodsExample example);\n\n    int updateByPrimaryKeySelective(Goods record);\n\n    int updateByPrimaryKeyWithBLOBs(Goods record);\n\n    int updateByPrimaryKey(Goods record);\n\n    List<Goods> selectByExampleWithBLOBsLimit(GoodsExample digGoodsExample);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/ImagePathMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.ImagePath;\nimport com.zhang.ssmschoolshop.entity.ImagePathExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ImagePathMapper {\n    long countByExample(ImagePathExample example);\n\n    int deleteByExample(ImagePathExample example);\n\n    int deleteByPrimaryKey(Integer pathid);\n\n    int insert(ImagePath record);\n\n    int insertSelective(ImagePath record);\n\n    List<ImagePath> selectByExample(ImagePathExample example);\n\n    ImagePath selectByPrimaryKey(Integer pathid);\n\n    int updateByExampleSelective(@Param(\"record\") ImagePath record, @Param(\"example\") ImagePathExample example);\n\n    int updateByExample(@Param(\"record\") ImagePath record, @Param(\"example\") ImagePathExample example);\n\n    int updateByPrimaryKeySelective(ImagePath record);\n\n    int updateByPrimaryKey(ImagePath record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/OrderItemMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.OrderItem;\nimport com.zhang.ssmschoolshop.entity.OrderItemExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface OrderItemMapper {\n    long countByExample(OrderItemExample example);\n\n    int deleteByExample(OrderItemExample example);\n\n    int deleteByPrimaryKey(Integer itemid);\n\n    int insert(OrderItem record);\n\n    int insertSelective(OrderItem record);\n\n    List<OrderItem> selectByExample(OrderItemExample example);\n\n    OrderItem selectByPrimaryKey(Integer itemid);\n\n    int updateByExampleSelective(@Param(\"record\") OrderItem record, @Param(\"example\") OrderItemExample example);\n\n    int updateByExample(@Param(\"record\") OrderItem record, @Param(\"example\") OrderItemExample example);\n\n    int updateByPrimaryKeySelective(OrderItem record);\n\n    int updateByPrimaryKey(OrderItem record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/OrderMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Order;\nimport com.zhang.ssmschoolshop.entity.OrderExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface OrderMapper {\n    long countByExample(OrderExample example);\n\n    int deleteByExample(OrderExample example);\n\n    int deleteByPrimaryKey(Integer orderid);\n\n    int insert(Order record);\n\n    int insertSelective(Order record);\n\n    List<Order> selectByExample(OrderExample example);\n\n    Order selectByPrimaryKey(Integer orderid);\n\n    int updateByExampleSelective(@Param(\"record\") Order record, @Param(\"example\") OrderExample example);\n\n    int updateByExample(@Param(\"record\") Order record, @Param(\"example\") OrderExample example);\n\n    int updateByPrimaryKeySelective(Order record);\n\n    int updateByPrimaryKey(Order record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/ShopCartMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.ShopCart;\nimport com.zhang.ssmschoolshop.entity.ShopCartExample;\nimport com.zhang.ssmschoolshop.entity.ShopCartKey;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ShopCartMapper {\n    long countByExample(ShopCartExample example);\n\n    int deleteByExample(ShopCartExample example);\n\n    int deleteByPrimaryKey(ShopCartKey key);\n\n    int insert(ShopCart record);\n\n    int insertSelective(ShopCart record);\n\n    List<ShopCart> selectByExample(ShopCartExample example);\n\n    ShopCart selectByPrimaryKey(ShopCartKey key);\n\n    int updateByExampleSelective(@Param(\"record\") ShopCart record, @Param(\"example\") ShopCartExample example);\n\n    int updateByExample(@Param(\"record\") ShopCart record, @Param(\"example\") ShopCartExample example);\n\n    int updateByPrimaryKeySelective(ShopCart record);\n\n    int updateByPrimaryKey(ShopCart record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/dao/UserMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface UserMapper {\n    long countByExample(UserExample example);\n\n    int deleteByExample(UserExample example);\n\n    int deleteByPrimaryKey(Integer userid);\n\n    int insert(User record);\n\n    int insertSelective(User record);\n\n    List<User> selectByExample(UserExample example);\n\n    User selectByPrimaryKey(Integer userid);\n\n    int updateByExampleSelective(@Param(\"record\") User record, @Param(\"example\") UserExample example);\n\n    int updateByExample(@Param(\"record\") User record, @Param(\"example\") UserExample example);\n\n    int updateByPrimaryKeySelective(User record);\n\n    int updateByPrimaryKey(User record);\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Activity.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\n/**\n * 促销活动\n */\npublic class Activity {\n\n    private Integer activityid;   //活动id\n\n    private String activityname;  //活动名\n\n    private String activitydes;  //活动地址\n\n    private Float discount;       //满减\n\n    private Integer fullprice;\n\n    private Integer reduceprice;\n\n    private Integer fullnum;\n\n    private Integer reducenum;\n\n    public Integer getActivityid() {\n        return activityid;\n    }\n\n    public void setActivityid(Integer activityid) {\n        this.activityid = activityid;\n    }\n\n    public String getActivityname() {\n        return activityname;\n    }\n\n    public void setActivityname(String activityname) {\n        this.activityname = activityname == null ? null : activityname.trim();\n    }\n\n    public String getActivitydes() {\n        return activitydes;\n    }\n\n    public void setActivitydes(String activitydes) {\n        this.activitydes = activitydes == null ? null : activitydes.trim();\n    }\n\n    public Float getDiscount() {\n        return discount;\n    }\n\n    public void setDiscount(Float discount) {\n        this.discount = discount;\n    }\n\n    public Integer getFullprice() {\n        return fullprice;\n    }\n\n    public void setFullprice(Integer fullprice) {\n        this.fullprice = fullprice;\n    }\n\n    public Integer getReduceprice() {\n        return reduceprice;\n    }\n\n    public void setReduceprice(Integer reduceprice) {\n        this.reduceprice = reduceprice;\n    }\n\n    public Integer getFullnum() {\n        return fullnum;\n    }\n\n    public void setFullnum(Integer fullnum) {\n        this.fullnum = fullnum;\n    }\n\n    public Integer getReducenum() {\n        return reducenum;\n    }\n\n    public void setReducenum(Integer reducenum) {\n        this.reducenum = reducenum;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/ActivityExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ActivityExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ActivityExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andActivityidIsNull() {\n            addCriterion(\"activityId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIsNotNull() {\n            addCriterion(\"activityId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidEqualTo(Integer value) {\n            addCriterion(\"activityId =\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotEqualTo(Integer value) {\n            addCriterion(\"activityId <>\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThan(Integer value) {\n            addCriterion(\"activityId >\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId >=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThan(Integer value) {\n            addCriterion(\"activityId <\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId <=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIn(List<Integer> values) {\n            addCriterion(\"activityId in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotIn(List<Integer> values) {\n            addCriterion(\"activityId not in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId not between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameIsNull() {\n            addCriterion(\"activityName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameIsNotNull() {\n            addCriterion(\"activityName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameEqualTo(String value) {\n            addCriterion(\"activityName =\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotEqualTo(String value) {\n            addCriterion(\"activityName <>\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameGreaterThan(String value) {\n            addCriterion(\"activityName >\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"activityName >=\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameLessThan(String value) {\n            addCriterion(\"activityName <\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameLessThanOrEqualTo(String value) {\n            addCriterion(\"activityName <=\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameLike(String value) {\n            addCriterion(\"activityName like\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotLike(String value) {\n            addCriterion(\"activityName not like\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameIn(List<String> values) {\n            addCriterion(\"activityName in\", values, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotIn(List<String> values) {\n            addCriterion(\"activityName not in\", values, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameBetween(String value1, String value2) {\n            addCriterion(\"activityName between\", value1, value2, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotBetween(String value1, String value2) {\n            addCriterion(\"activityName not between\", value1, value2, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesIsNull() {\n            addCriterion(\"activityDes is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesIsNotNull() {\n            addCriterion(\"activityDes is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesEqualTo(String value) {\n            addCriterion(\"activityDes =\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotEqualTo(String value) {\n            addCriterion(\"activityDes <>\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesGreaterThan(String value) {\n            addCriterion(\"activityDes >\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesGreaterThanOrEqualTo(String value) {\n            addCriterion(\"activityDes >=\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesLessThan(String value) {\n            addCriterion(\"activityDes <\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesLessThanOrEqualTo(String value) {\n            addCriterion(\"activityDes <=\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesLike(String value) {\n            addCriterion(\"activityDes like\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotLike(String value) {\n            addCriterion(\"activityDes not like\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesIn(List<String> values) {\n            addCriterion(\"activityDes in\", values, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotIn(List<String> values) {\n            addCriterion(\"activityDes not in\", values, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesBetween(String value1, String value2) {\n            addCriterion(\"activityDes between\", value1, value2, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotBetween(String value1, String value2) {\n            addCriterion(\"activityDes not between\", value1, value2, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountIsNull() {\n            addCriterion(\"discount is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountIsNotNull() {\n            addCriterion(\"discount is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountEqualTo(Float value) {\n            addCriterion(\"discount =\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountNotEqualTo(Float value) {\n            addCriterion(\"discount <>\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountGreaterThan(Float value) {\n            addCriterion(\"discount >\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountGreaterThanOrEqualTo(Float value) {\n            addCriterion(\"discount >=\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountLessThan(Float value) {\n            addCriterion(\"discount <\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountLessThanOrEqualTo(Float value) {\n            addCriterion(\"discount <=\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountIn(List<Float> values) {\n            addCriterion(\"discount in\", values, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountNotIn(List<Float> values) {\n            addCriterion(\"discount not in\", values, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountBetween(Float value1, Float value2) {\n            addCriterion(\"discount between\", value1, value2, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountNotBetween(Float value1, Float value2) {\n            addCriterion(\"discount not between\", value1, value2, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceIsNull() {\n            addCriterion(\"fullPrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceIsNotNull() {\n            addCriterion(\"fullPrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceEqualTo(Integer value) {\n            addCriterion(\"fullPrice =\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceNotEqualTo(Integer value) {\n            addCriterion(\"fullPrice <>\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceGreaterThan(Integer value) {\n            addCriterion(\"fullPrice >\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"fullPrice >=\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceLessThan(Integer value) {\n            addCriterion(\"fullPrice <\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceLessThanOrEqualTo(Integer value) {\n            addCriterion(\"fullPrice <=\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceIn(List<Integer> values) {\n            addCriterion(\"fullPrice in\", values, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceNotIn(List<Integer> values) {\n            addCriterion(\"fullPrice not in\", values, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullPrice between\", value1, value2, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullPrice not between\", value1, value2, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceIsNull() {\n            addCriterion(\"reducePrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceIsNotNull() {\n            addCriterion(\"reducePrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceEqualTo(Integer value) {\n            addCriterion(\"reducePrice =\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceNotEqualTo(Integer value) {\n            addCriterion(\"reducePrice <>\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceGreaterThan(Integer value) {\n            addCriterion(\"reducePrice >\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"reducePrice >=\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceLessThan(Integer value) {\n            addCriterion(\"reducePrice <\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceLessThanOrEqualTo(Integer value) {\n            addCriterion(\"reducePrice <=\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceIn(List<Integer> values) {\n            addCriterion(\"reducePrice in\", values, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceNotIn(List<Integer> values) {\n            addCriterion(\"reducePrice not in\", values, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceBetween(Integer value1, Integer value2) {\n            addCriterion(\"reducePrice between\", value1, value2, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"reducePrice not between\", value1, value2, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumIsNull() {\n            addCriterion(\"fullNum is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumIsNotNull() {\n            addCriterion(\"fullNum is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumEqualTo(Integer value) {\n            addCriterion(\"fullNum =\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumNotEqualTo(Integer value) {\n            addCriterion(\"fullNum <>\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumGreaterThan(Integer value) {\n            addCriterion(\"fullNum >\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"fullNum >=\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumLessThan(Integer value) {\n            addCriterion(\"fullNum <\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"fullNum <=\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumIn(List<Integer> values) {\n            addCriterion(\"fullNum in\", values, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumNotIn(List<Integer> values) {\n            addCriterion(\"fullNum not in\", values, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullNum between\", value1, value2, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullNum not between\", value1, value2, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumIsNull() {\n            addCriterion(\"reduceNum is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumIsNotNull() {\n            addCriterion(\"reduceNum is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumEqualTo(Integer value) {\n            addCriterion(\"reduceNum =\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumNotEqualTo(Integer value) {\n            addCriterion(\"reduceNum <>\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumGreaterThan(Integer value) {\n            addCriterion(\"reduceNum >\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"reduceNum >=\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumLessThan(Integer value) {\n            addCriterion(\"reduceNum <\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"reduceNum <=\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumIn(List<Integer> values) {\n            addCriterion(\"reduceNum in\", values, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumNotIn(List<Integer> values) {\n            addCriterion(\"reduceNum not in\", values, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumBetween(Integer value1, Integer value2) {\n            addCriterion(\"reduceNum between\", value1, value2, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"reduceNum not between\", value1, value2, \"reducenum\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Address.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Address {\n    private Integer addressid;\n\n    private Integer userid;\n\n    private String province;\n\n    private String city;\n\n    private String county;\n\n    private String detailaddr;\n\n    private String conname;\n\n    private String contel;\n\n    public Integer getAddressid() {\n        return addressid;\n    }\n\n    public void setAddressid(Integer addressid) {\n        this.addressid = addressid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public String getProvince() {\n        return province;\n    }\n\n    public void setProvince(String province) {\n        this.province = province == null ? null : province.trim();\n    }\n\n    public String getCity() {\n        return city;\n    }\n\n    public void setCity(String city) {\n        this.city = city == null ? null : city.trim();\n    }\n\n    public String getCounty() {\n        return county;\n    }\n\n    public void setCounty(String county) {\n        this.county = county == null ? null : county.trim();\n    }\n\n    public String getDetailaddr() {\n        return detailaddr;\n    }\n\n    public void setDetailaddr(String detailaddr) {\n        this.detailaddr = detailaddr == null ? null : detailaddr.trim();\n    }\n\n    public String getConname() {\n        return conname;\n    }\n\n    public void setConname(String conname) {\n        this.conname = conname == null ? null : conname.trim();\n    }\n\n    public String getContel() {\n        return contel;\n    }\n\n    public void setContel(String contel) {\n        this.contel = contel == null ? null : contel.trim();\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/AddressExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class AddressExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public AddressExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andAddressidIsNull() {\n            addCriterion(\"addressID is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIsNotNull() {\n            addCriterion(\"addressID is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidEqualTo(Integer value) {\n            addCriterion(\"addressID =\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotEqualTo(Integer value) {\n            addCriterion(\"addressID <>\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThan(Integer value) {\n            addCriterion(\"addressID >\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"addressID >=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThan(Integer value) {\n            addCriterion(\"addressID <\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"addressID <=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIn(List<Integer> values) {\n            addCriterion(\"addressID in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotIn(List<Integer> values) {\n            addCriterion(\"addressID not in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressID between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressID not between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceIsNull() {\n            addCriterion(\"province is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceIsNotNull() {\n            addCriterion(\"province is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceEqualTo(String value) {\n            addCriterion(\"province =\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotEqualTo(String value) {\n            addCriterion(\"province <>\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceGreaterThan(String value) {\n            addCriterion(\"province >\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceGreaterThanOrEqualTo(String value) {\n            addCriterion(\"province >=\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceLessThan(String value) {\n            addCriterion(\"province <\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceLessThanOrEqualTo(String value) {\n            addCriterion(\"province <=\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceLike(String value) {\n            addCriterion(\"province like\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotLike(String value) {\n            addCriterion(\"province not like\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceIn(List<String> values) {\n            addCriterion(\"province in\", values, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotIn(List<String> values) {\n            addCriterion(\"province not in\", values, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceBetween(String value1, String value2) {\n            addCriterion(\"province between\", value1, value2, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotBetween(String value1, String value2) {\n            addCriterion(\"province not between\", value1, value2, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityIsNull() {\n            addCriterion(\"city is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityIsNotNull() {\n            addCriterion(\"city is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityEqualTo(String value) {\n            addCriterion(\"city =\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotEqualTo(String value) {\n            addCriterion(\"city <>\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityGreaterThan(String value) {\n            addCriterion(\"city >\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityGreaterThanOrEqualTo(String value) {\n            addCriterion(\"city >=\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityLessThan(String value) {\n            addCriterion(\"city <\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityLessThanOrEqualTo(String value) {\n            addCriterion(\"city <=\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityLike(String value) {\n            addCriterion(\"city like\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotLike(String value) {\n            addCriterion(\"city not like\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityIn(List<String> values) {\n            addCriterion(\"city in\", values, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotIn(List<String> values) {\n            addCriterion(\"city not in\", values, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityBetween(String value1, String value2) {\n            addCriterion(\"city between\", value1, value2, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotBetween(String value1, String value2) {\n            addCriterion(\"city not between\", value1, value2, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyIsNull() {\n            addCriterion(\"county is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyIsNotNull() {\n            addCriterion(\"county is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyEqualTo(String value) {\n            addCriterion(\"county =\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotEqualTo(String value) {\n            addCriterion(\"county <>\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyGreaterThan(String value) {\n            addCriterion(\"county >\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyGreaterThanOrEqualTo(String value) {\n            addCriterion(\"county >=\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyLessThan(String value) {\n            addCriterion(\"county <\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyLessThanOrEqualTo(String value) {\n            addCriterion(\"county <=\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyLike(String value) {\n            addCriterion(\"county like\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotLike(String value) {\n            addCriterion(\"county not like\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyIn(List<String> values) {\n            addCriterion(\"county in\", values, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotIn(List<String> values) {\n            addCriterion(\"county not in\", values, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyBetween(String value1, String value2) {\n            addCriterion(\"county between\", value1, value2, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotBetween(String value1, String value2) {\n            addCriterion(\"county not between\", value1, value2, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrIsNull() {\n            addCriterion(\"detailAddr is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrIsNotNull() {\n            addCriterion(\"detailAddr is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrEqualTo(String value) {\n            addCriterion(\"detailAddr =\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotEqualTo(String value) {\n            addCriterion(\"detailAddr <>\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrGreaterThan(String value) {\n            addCriterion(\"detailAddr >\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrGreaterThanOrEqualTo(String value) {\n            addCriterion(\"detailAddr >=\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrLessThan(String value) {\n            addCriterion(\"detailAddr <\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrLessThanOrEqualTo(String value) {\n            addCriterion(\"detailAddr <=\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrLike(String value) {\n            addCriterion(\"detailAddr like\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotLike(String value) {\n            addCriterion(\"detailAddr not like\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrIn(List<String> values) {\n            addCriterion(\"detailAddr in\", values, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotIn(List<String> values) {\n            addCriterion(\"detailAddr not in\", values, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrBetween(String value1, String value2) {\n            addCriterion(\"detailAddr between\", value1, value2, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotBetween(String value1, String value2) {\n            addCriterion(\"detailAddr not between\", value1, value2, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameIsNull() {\n            addCriterion(\"conName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameIsNotNull() {\n            addCriterion(\"conName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameEqualTo(String value) {\n            addCriterion(\"conName =\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotEqualTo(String value) {\n            addCriterion(\"conName <>\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameGreaterThan(String value) {\n            addCriterion(\"conName >\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"conName >=\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameLessThan(String value) {\n            addCriterion(\"conName <\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameLessThanOrEqualTo(String value) {\n            addCriterion(\"conName <=\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameLike(String value) {\n            addCriterion(\"conName like\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotLike(String value) {\n            addCriterion(\"conName not like\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameIn(List<String> values) {\n            addCriterion(\"conName in\", values, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotIn(List<String> values) {\n            addCriterion(\"conName not in\", values, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameBetween(String value1, String value2) {\n            addCriterion(\"conName between\", value1, value2, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotBetween(String value1, String value2) {\n            addCriterion(\"conName not between\", value1, value2, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelIsNull() {\n            addCriterion(\"conTel is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelIsNotNull() {\n            addCriterion(\"conTel is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelEqualTo(String value) {\n            addCriterion(\"conTel =\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotEqualTo(String value) {\n            addCriterion(\"conTel <>\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelGreaterThan(String value) {\n            addCriterion(\"conTel >\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelGreaterThanOrEqualTo(String value) {\n            addCriterion(\"conTel >=\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelLessThan(String value) {\n            addCriterion(\"conTel <\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelLessThanOrEqualTo(String value) {\n            addCriterion(\"conTel <=\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelLike(String value) {\n            addCriterion(\"conTel like\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotLike(String value) {\n            addCriterion(\"conTel not like\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelIn(List<String> values) {\n            addCriterion(\"conTel in\", values, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotIn(List<String> values) {\n            addCriterion(\"conTel not in\", values, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelBetween(String value1, String value2) {\n            addCriterion(\"conTel between\", value1, value2, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotBetween(String value1, String value2) {\n            addCriterion(\"conTel not between\", value1, value2, \"contel\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Admin.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Admin {\n    private Integer adminid;\n\n    private String adminname;\n\n    private String password;\n\n    public Admin(Integer adminid, String adminname, String password) {\n        this.adminid = adminid;\n        this.adminname = adminname;\n        this.password = password;\n    }\n\n    public Admin() {\n    }\n\n    public Integer getAdminid() {\n        return adminid;\n    }\n\n    public void setAdminid(Integer adminid) {\n        this.adminid = adminid;\n    }\n\n    public String getAdminname() {\n        return adminname;\n    }\n\n    public void setAdminname(String adminname) {\n        this.adminname = adminname == null ? null : adminname.trim();\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password == null ? null : password.trim();\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/AdminExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class AdminExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public AdminExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andAdminidIsNull() {\n            addCriterion(\"adminId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidIsNotNull() {\n            addCriterion(\"adminId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidEqualTo(Integer value) {\n            addCriterion(\"adminId =\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidNotEqualTo(Integer value) {\n            addCriterion(\"adminId <>\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidGreaterThan(Integer value) {\n            addCriterion(\"adminId >\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"adminId >=\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidLessThan(Integer value) {\n            addCriterion(\"adminId <\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"adminId <=\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidIn(List<Integer> values) {\n            addCriterion(\"adminId in\", values, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidNotIn(List<Integer> values) {\n            addCriterion(\"adminId not in\", values, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidBetween(Integer value1, Integer value2) {\n            addCriterion(\"adminId between\", value1, value2, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"adminId not between\", value1, value2, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameIsNull() {\n            addCriterion(\"adminName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameIsNotNull() {\n            addCriterion(\"adminName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameEqualTo(String value) {\n            addCriterion(\"adminName =\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotEqualTo(String value) {\n            addCriterion(\"adminName <>\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameGreaterThan(String value) {\n            addCriterion(\"adminName >\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"adminName >=\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameLessThan(String value) {\n            addCriterion(\"adminName <\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameLessThanOrEqualTo(String value) {\n            addCriterion(\"adminName <=\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameLike(String value) {\n            addCriterion(\"adminName like\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotLike(String value) {\n            addCriterion(\"adminName not like\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameIn(List<String> values) {\n            addCriterion(\"adminName in\", values, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotIn(List<String> values) {\n            addCriterion(\"adminName not in\", values, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameBetween(String value1, String value2) {\n            addCriterion(\"adminName between\", value1, value2, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotBetween(String value1, String value2) {\n            addCriterion(\"adminName not between\", value1, value2, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNull() {\n            addCriterion(\"password is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNotNull() {\n            addCriterion(\"password is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordEqualTo(String value) {\n            addCriterion(\"password =\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotEqualTo(String value) {\n            addCriterion(\"password <>\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThan(String value) {\n            addCriterion(\"password >\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThanOrEqualTo(String value) {\n            addCriterion(\"password >=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThan(String value) {\n            addCriterion(\"password <\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThanOrEqualTo(String value) {\n            addCriterion(\"password <=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLike(String value) {\n            addCriterion(\"password like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotLike(String value) {\n            addCriterion(\"password not like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIn(List<String> values) {\n            addCriterion(\"password in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotIn(List<String> values) {\n            addCriterion(\"password not in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordBetween(String value1, String value2) {\n            addCriterion(\"password between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotBetween(String value1, String value2) {\n            addCriterion(\"password not between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Category.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Category {\n    private Integer cateid;\n\n    private String catename;\n\n    public Integer getCateid() {\n        return cateid;\n    }\n\n    public void setCateid(Integer cateid) {\n        this.cateid = cateid;\n    }\n\n    public String getCatename() {\n        return catename;\n    }\n\n    public void setCatename(String catename) {\n        this.catename = catename == null ? null : catename.trim();\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/CategoryExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class CategoryExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public CategoryExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andCateidIsNull() {\n            addCriterion(\"cateId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidIsNotNull() {\n            addCriterion(\"cateId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidEqualTo(Integer value) {\n            addCriterion(\"cateId =\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidNotEqualTo(Integer value) {\n            addCriterion(\"cateId <>\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidGreaterThan(Integer value) {\n            addCriterion(\"cateId >\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"cateId >=\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidLessThan(Integer value) {\n            addCriterion(\"cateId <\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"cateId <=\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidIn(List<Integer> values) {\n            addCriterion(\"cateId in\", values, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidNotIn(List<Integer> values) {\n            addCriterion(\"cateId not in\", values, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidBetween(Integer value1, Integer value2) {\n            addCriterion(\"cateId between\", value1, value2, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"cateId not between\", value1, value2, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameIsNull() {\n            addCriterion(\"cateName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameIsNotNull() {\n            addCriterion(\"cateName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameEqualTo(String value) {\n            addCriterion(\"cateName =\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotEqualTo(String value) {\n            addCriterion(\"cateName <>\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameGreaterThan(String value) {\n            addCriterion(\"cateName >\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"cateName >=\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameLessThan(String value) {\n            addCriterion(\"cateName <\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameLessThanOrEqualTo(String value) {\n            addCriterion(\"cateName <=\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameLike(String value) {\n            addCriterion(\"cateName like\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotLike(String value) {\n            addCriterion(\"cateName not like\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameIn(List<String> values) {\n            addCriterion(\"cateName in\", values, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotIn(List<String> values) {\n            addCriterion(\"cateName not in\", values, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameBetween(String value1, String value2) {\n            addCriterion(\"cateName between\", value1, value2, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotBetween(String value1, String value2) {\n            addCriterion(\"cateName not between\", value1, value2, \"catename\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Comment.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class Comment {\n    private Integer commentid;\n\n    private Integer userid;\n\n    private Integer goodsid;\n\n    private Integer point;\n\n    private String content;\n\n    private Date commenttime;\n\n    private String username;\n\n    public Integer getCommentid() {\n        return commentid;\n    }\n\n    public void setCommentid(Integer commentid) {\n        this.commentid = commentid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n\n    public Integer getPoint() {\n        return point;\n    }\n\n    public void setPoint(Integer point) {\n        this.point = point;\n    }\n\n    public String getContent() {\n        return content;\n    }\n\n    public void setContent(String content) {\n        this.content = content == null ? null : content.trim();\n    }\n\n    public Date getCommenttime() {\n        return commenttime;\n    }\n\n    public void setCommenttime(Date commenttime) {\n        this.commenttime = commenttime;\n    }\n\n    public void setUserName(String userName) {this.username=userName;}\n\n    public String getUsername() {return username;}\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/CommentExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class CommentExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public CommentExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andCommentidIsNull() {\n            addCriterion(\"commentId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidIsNotNull() {\n            addCriterion(\"commentId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidEqualTo(Integer value) {\n            addCriterion(\"commentId =\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidNotEqualTo(Integer value) {\n            addCriterion(\"commentId <>\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidGreaterThan(Integer value) {\n            addCriterion(\"commentId >\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"commentId >=\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidLessThan(Integer value) {\n            addCriterion(\"commentId <\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"commentId <=\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidIn(List<Integer> values) {\n            addCriterion(\"commentId in\", values, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidNotIn(List<Integer> values) {\n            addCriterion(\"commentId not in\", values, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidBetween(Integer value1, Integer value2) {\n            addCriterion(\"commentId between\", value1, value2, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"commentId not between\", value1, value2, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointIsNull() {\n            addCriterion(\"point is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointIsNotNull() {\n            addCriterion(\"point is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointEqualTo(Integer value) {\n            addCriterion(\"point =\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointNotEqualTo(Integer value) {\n            addCriterion(\"point <>\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointGreaterThan(Integer value) {\n            addCriterion(\"point >\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"point >=\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointLessThan(Integer value) {\n            addCriterion(\"point <\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointLessThanOrEqualTo(Integer value) {\n            addCriterion(\"point <=\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointIn(List<Integer> values) {\n            addCriterion(\"point in\", values, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointNotIn(List<Integer> values) {\n            addCriterion(\"point not in\", values, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointBetween(Integer value1, Integer value2) {\n            addCriterion(\"point between\", value1, value2, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"point not between\", value1, value2, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentIsNull() {\n            addCriterion(\"content is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentIsNotNull() {\n            addCriterion(\"content is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentEqualTo(String value) {\n            addCriterion(\"content =\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotEqualTo(String value) {\n            addCriterion(\"content <>\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentGreaterThan(String value) {\n            addCriterion(\"content >\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentGreaterThanOrEqualTo(String value) {\n            addCriterion(\"content >=\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentLessThan(String value) {\n            addCriterion(\"content <\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentLessThanOrEqualTo(String value) {\n            addCriterion(\"content <=\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentLike(String value) {\n            addCriterion(\"content like\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotLike(String value) {\n            addCriterion(\"content not like\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentIn(List<String> values) {\n            addCriterion(\"content in\", values, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotIn(List<String> values) {\n            addCriterion(\"content not in\", values, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentBetween(String value1, String value2) {\n            addCriterion(\"content between\", value1, value2, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotBetween(String value1, String value2) {\n            addCriterion(\"content not between\", value1, value2, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeIsNull() {\n            addCriterion(\"commentTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeIsNotNull() {\n            addCriterion(\"commentTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeEqualTo(Date value) {\n            addCriterion(\"commentTime =\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeNotEqualTo(Date value) {\n            addCriterion(\"commentTime <>\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeGreaterThan(Date value) {\n            addCriterion(\"commentTime >\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"commentTime >=\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeLessThan(Date value) {\n            addCriterion(\"commentTime <\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"commentTime <=\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeIn(List<Date> values) {\n            addCriterion(\"commentTime in\", values, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeNotIn(List<Date> values) {\n            addCriterion(\"commentTime not in\", values, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeBetween(Date value1, Date value2) {\n            addCriterion(\"commentTime between\", value1, value2, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"commentTime not between\", value1, value2, \"commenttime\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/EmailSend.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport lombok.Data;\nimport lombok.ToString;\n\nimport java.io.Serializable;\n\n/**\n * @author codingzx\n * @description\n * @date 2021/3/27 21:13\n */\n@Data\n@ToString\npublic class EmailSend implements Serializable {\n\n    /**\n     * 邮件接收方，可多人\n     */\n    private String[] receivers;\n    /**\n     * 邮件主题\n     */\n    private String subject;\n    /**\n     * 邮件内容\n     */\n    private String content;\n\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Favorite.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class Favorite extends FavoriteKey {\n    private Date collecttime;\n\n    public Date getCollecttime() {\n        return collecttime;\n    }\n\n    public void setCollecttime(Date collecttime) {\n        this.collecttime = collecttime;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/FavoriteExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class FavoriteExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public FavoriteExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeIsNull() {\n            addCriterion(\"collectTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeIsNotNull() {\n            addCriterion(\"collectTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeEqualTo(Date value) {\n            addCriterion(\"collectTime =\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeNotEqualTo(Date value) {\n            addCriterion(\"collectTime <>\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeGreaterThan(Date value) {\n            addCriterion(\"collectTime >\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"collectTime >=\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeLessThan(Date value) {\n            addCriterion(\"collectTime <\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"collectTime <=\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeIn(List<Date> values) {\n            addCriterion(\"collectTime in\", values, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeNotIn(List<Date> values) {\n            addCriterion(\"collectTime not in\", values, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeBetween(Date value1, Date value2) {\n            addCriterion(\"collectTime between\", value1, value2, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"collectTime not between\", value1, value2, \"collecttime\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/FavoriteKey.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class FavoriteKey {\n    private Integer userid;\n\n    private Integer goodsid;\n\n    public FavoriteKey() {\n    }\n\n    public FavoriteKey(Integer userid, Integer goodsid) {\n\n        this.userid = userid;\n        this.goodsid = goodsid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Goods.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\nimport java.util.List;\n\npublic class Goods {\n    private Integer goodsid;\n\n    private String goodsname;\n\n    private Integer price;\n\n    private Integer num;\n\n    private Date uptime;\n\n    private Integer category;\n\n    private String detailcate;\n\n    private Integer activityid;\n\n    private String description;\n\n    private List<ImagePath> imagePaths;\n\n    private boolean fav;\n\n    private Activity activity;\n\n    private Float newPrice;\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n\n    public String getGoodsname() {\n        return goodsname;\n    }\n\n    public void setGoodsname(String goodsname) {\n        this.goodsname = goodsname == null ? null : goodsname.trim();\n    }\n\n    public Integer getPrice() {\n        return price;\n    }\n\n    public void setPrice(Integer price) {\n        this.price = price;\n    }\n\n    public Integer getNum() {\n        return num;\n    }\n\n    public void setNum(Integer num) {\n        this.num = num;\n    }\n\n    public Date getUptime() {\n        return uptime;\n    }\n\n    public void setUptime(Date uptime) {\n        this.uptime = uptime;\n    }\n\n    public Integer getCategory() {\n        return category;\n    }\n\n    public void setCategory(Integer category) {\n        this.category = category;\n    }\n\n    public String getDetailcate() {\n        return detailcate;\n    }\n\n    public void setDetailcate(String detailcate) {\n        this.detailcate = detailcate == null ? null : detailcate.trim();\n    }\n\n    public Integer getActivityid() {\n        return activityid;\n    }\n\n    public void setActivityid(Integer activityid) {\n        this.activityid = activityid;\n    }\n\n    public String getDescription() {\n        return description;\n    }\n\n    public void setDescription(String description) {\n        this.description = description == null ? null : description.trim();\n    }\n\n    public List<ImagePath> getImagePaths() {\n        return imagePaths;\n    }\n\n    public void setImagePaths(List<ImagePath> imagePaths) {\n        this.imagePaths = imagePaths;\n    }\n\n\n    public boolean isFav() {\n        return fav;\n    }\n\n    public void setFav(boolean fav) {\n        this.fav = fav;\n    }\n\n    public Activity getActivity() {\n        return activity;\n    }\n\n    public void setActivity(Activity activity) {\n        this.activity = activity;\n    }\n\n    public Float getNewPrice() {\n        return newPrice;\n    }\n\n    public void setNewPrice(Float newPrice) {\n        this.newPrice = newPrice;\n    }\n\n    @Override\n    public String toString() {\n        return \"Goods{\" +\n                \"goodsid=\" + goodsid +\n                \", goodsname='\" + goodsname + '\\'' +\n                \", price=\" + price +\n                \", num=\" + num +\n                \", uptime=\" + uptime +\n                \", category=\" + category +\n                \", detailcate='\" + detailcate + '\\'' +\n                \", activityid=\" + activityid +\n                \", description='\" + description + '\\'' +\n                \", imagePaths=\" + imagePaths +\n                \", fav=\" + fav +\n                \", activity=\" + activity +\n                \", newPrice=\" + newPrice +\n                '}';\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/GoodsExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class GoodsExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public GoodsExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameIsNull() {\n            addCriterion(\"goodsName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameIsNotNull() {\n            addCriterion(\"goodsName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameEqualTo(String value) {\n            addCriterion(\"goodsName =\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotEqualTo(String value) {\n            addCriterion(\"goodsName <>\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameGreaterThan(String value) {\n            addCriterion(\"goodsName >\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"goodsName >=\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameLessThan(String value) {\n            addCriterion(\"goodsName <\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameLessThanOrEqualTo(String value) {\n            addCriterion(\"goodsName <=\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameLike(String value) {\n            addCriterion(\"goodsName like\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotLike(String value) {\n            addCriterion(\"goodsName not like\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameIn(List<String> values) {\n            addCriterion(\"goodsName in\", values, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotIn(List<String> values) {\n            addCriterion(\"goodsName not in\", values, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameBetween(String value1, String value2) {\n            addCriterion(\"goodsName between\", value1, value2, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotBetween(String value1, String value2) {\n            addCriterion(\"goodsName not between\", value1, value2, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceIsNull() {\n            addCriterion(\"price is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceIsNotNull() {\n            addCriterion(\"price is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceEqualTo(Integer value) {\n            addCriterion(\"price =\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceNotEqualTo(Integer value) {\n            addCriterion(\"price <>\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceGreaterThan(Integer value) {\n            addCriterion(\"price >\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"price >=\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceLessThan(Integer value) {\n            addCriterion(\"price <\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceLessThanOrEqualTo(Integer value) {\n            addCriterion(\"price <=\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceIn(List<Integer> values) {\n            addCriterion(\"price in\", values, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceNotIn(List<Integer> values) {\n            addCriterion(\"price not in\", values, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceBetween(Integer value1, Integer value2) {\n            addCriterion(\"price between\", value1, value2, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"price not between\", value1, value2, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNull() {\n            addCriterion(\"num is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNotNull() {\n            addCriterion(\"num is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumEqualTo(Integer value) {\n            addCriterion(\"num =\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotEqualTo(Integer value) {\n            addCriterion(\"num <>\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThan(Integer value) {\n            addCriterion(\"num >\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"num >=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThan(Integer value) {\n            addCriterion(\"num <\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"num <=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIn(List<Integer> values) {\n            addCriterion(\"num in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotIn(List<Integer> values) {\n            addCriterion(\"num not in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumBetween(Integer value1, Integer value2) {\n            addCriterion(\"num between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"num not between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeIsNull() {\n            addCriterion(\"upTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeIsNotNull() {\n            addCriterion(\"upTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeEqualTo(Date value) {\n            addCriterion(\"upTime =\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeNotEqualTo(Date value) {\n            addCriterion(\"upTime <>\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeGreaterThan(Date value) {\n            addCriterion(\"upTime >\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"upTime >=\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeLessThan(Date value) {\n            addCriterion(\"upTime <\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"upTime <=\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeIn(List<Date> values) {\n            addCriterion(\"upTime in\", values, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeNotIn(List<Date> values) {\n            addCriterion(\"upTime not in\", values, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeBetween(Date value1, Date value2) {\n            addCriterion(\"upTime between\", value1, value2, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"upTime not between\", value1, value2, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryIsNull() {\n            addCriterion(\"category is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryIsNotNull() {\n            addCriterion(\"category is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryEqualTo(Integer value) {\n            addCriterion(\"category =\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryNotEqualTo(Integer value) {\n            addCriterion(\"category <>\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryGreaterThan(Integer value) {\n            addCriterion(\"category >\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"category >=\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryLessThan(Integer value) {\n            addCriterion(\"category <\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryLessThanOrEqualTo(Integer value) {\n            addCriterion(\"category <=\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryIn(List<Integer> values) {\n            addCriterion(\"category in\", values, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryNotIn(List<Integer> values) {\n            addCriterion(\"category not in\", values, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryBetween(Integer value1, Integer value2) {\n            addCriterion(\"category between\", value1, value2, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"category not between\", value1, value2, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateIsNull() {\n            addCriterion(\"detailCate is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateIsNotNull() {\n            addCriterion(\"detailCate is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateEqualTo(String value) {\n            addCriterion(\"detailCate =\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotEqualTo(String value) {\n            addCriterion(\"detailCate <>\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateGreaterThan(String value) {\n            addCriterion(\"detailCate >\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateGreaterThanOrEqualTo(String value) {\n            addCriterion(\"detailCate >=\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateLessThan(String value) {\n            addCriterion(\"detailCate <\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateLessThanOrEqualTo(String value) {\n            addCriterion(\"detailCate <=\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateLike(String value) {\n            addCriterion(\"detailCate like\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotLike(String value) {\n            addCriterion(\"detailCate not like\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateIn(List<String> values) {\n            addCriterion(\"detailCate in\", values, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotIn(List<String> values) {\n            addCriterion(\"detailCate not in\", values, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateBetween(String value1, String value2) {\n            addCriterion(\"detailCate between\", value1, value2, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotBetween(String value1, String value2) {\n            addCriterion(\"detailCate not between\", value1, value2, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIsNull() {\n            addCriterion(\"activityId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIsNotNull() {\n            addCriterion(\"activityId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidEqualTo(Integer value) {\n            addCriterion(\"activityId =\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotEqualTo(Integer value) {\n            addCriterion(\"activityId <>\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThan(Integer value) {\n            addCriterion(\"activityId >\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId >=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThan(Integer value) {\n            addCriterion(\"activityId <\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId <=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIn(List<Integer> values) {\n            addCriterion(\"activityId in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotIn(List<Integer> values) {\n            addCriterion(\"activityId not in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId not between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/GoodsPrice.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class GoodsPrice {\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/ImagePath.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class ImagePath {\n    private Integer pathid;\n\n    private Integer goodid;\n\n    private String path;\n\n    public ImagePath() {\n    }\n\n    public ImagePath(Integer pathid, Integer goodid, String path) {\n\n        this.pathid = pathid;\n        this.goodid = goodid;\n        this.path = path;\n    }\n\n    public Integer getPathid() {\n        return pathid;\n    }\n\n    public void setPathid(Integer pathid) {\n        this.pathid = pathid;\n    }\n\n    public Integer getGoodid() {\n        return goodid;\n    }\n\n    public void setGoodid(Integer goodid) {\n        this.goodid = goodid;\n    }\n\n    public String getPath() {\n        return path;\n    }\n\n    public void setPath(String path) {\n        this.path = path == null ? null : path.trim();\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/ImagePathExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ImagePathExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ImagePathExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andPathidIsNull() {\n            addCriterion(\"pathId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidIsNotNull() {\n            addCriterion(\"pathId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidEqualTo(Integer value) {\n            addCriterion(\"pathId =\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidNotEqualTo(Integer value) {\n            addCriterion(\"pathId <>\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidGreaterThan(Integer value) {\n            addCriterion(\"pathId >\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"pathId >=\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidLessThan(Integer value) {\n            addCriterion(\"pathId <\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"pathId <=\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidIn(List<Integer> values) {\n            addCriterion(\"pathId in\", values, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidNotIn(List<Integer> values) {\n            addCriterion(\"pathId not in\", values, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidBetween(Integer value1, Integer value2) {\n            addCriterion(\"pathId between\", value1, value2, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"pathId not between\", value1, value2, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidIsNull() {\n            addCriterion(\"goodId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidIsNotNull() {\n            addCriterion(\"goodId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidEqualTo(Integer value) {\n            addCriterion(\"goodId =\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidNotEqualTo(Integer value) {\n            addCriterion(\"goodId <>\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidGreaterThan(Integer value) {\n            addCriterion(\"goodId >\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodId >=\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidLessThan(Integer value) {\n            addCriterion(\"goodId <\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodId <=\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidIn(List<Integer> values) {\n            addCriterion(\"goodId in\", values, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidNotIn(List<Integer> values) {\n            addCriterion(\"goodId not in\", values, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodId between\", value1, value2, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodId not between\", value1, value2, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathIsNull() {\n            addCriterion(\"path is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathIsNotNull() {\n            addCriterion(\"path is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathEqualTo(String value) {\n            addCriterion(\"path =\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotEqualTo(String value) {\n            addCriterion(\"path <>\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathGreaterThan(String value) {\n            addCriterion(\"path >\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathGreaterThanOrEqualTo(String value) {\n            addCriterion(\"path >=\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathLessThan(String value) {\n            addCriterion(\"path <\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathLessThanOrEqualTo(String value) {\n            addCriterion(\"path <=\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathLike(String value) {\n            addCriterion(\"path like\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotLike(String value) {\n            addCriterion(\"path not like\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathIn(List<String> values) {\n            addCriterion(\"path in\", values, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotIn(List<String> values) {\n            addCriterion(\"path not in\", values, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathBetween(String value1, String value2) {\n            addCriterion(\"path between\", value1, value2, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotBetween(String value1, String value2) {\n            addCriterion(\"path not between\", value1, value2, \"path\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/Order.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\nimport java.util.List;\n\npublic class Order {\n    private Integer orderid;\n\n    private Integer userid;\n\n    private Date ordertime;\n\n    private Float oldprice;\n\n    private Float newprice;\n\n    private Boolean ispay;\n\n    private Boolean issend;\n\n    private Boolean isreceive;\n\n    private Boolean iscomplete;\n\n    private Integer addressid;\n\n    private List<Goods> goodsInfo;\n\n    public Order() {\n    }\n\n    private Address address;\n\n    public Order(Integer orderid, Integer userid, Date ordertime, Float oldprice, Float newprice, Boolean ispay, Boolean issend, Boolean isreceive, Boolean iscomplete, Integer addressid, List<Goods> goodsInfo, Address address) {\n        this.orderid = orderid;\n        this.userid = userid;\n        this.ordertime = ordertime;\n        this.oldprice = oldprice;\n        this.newprice = newprice;\n        this.ispay = ispay;\n        this.issend = issend;\n        this.isreceive = isreceive;\n        this.iscomplete = iscomplete;\n        this.addressid = addressid;\n        this.goodsInfo = goodsInfo;\n        this.address = address;\n    }\n\n    public Integer getOrderid() {\n        return orderid;\n    }\n\n    public void setOrderid(Integer orderid) {\n        this.orderid = orderid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Date getOrdertime() {\n        return ordertime;\n    }\n\n    public void setOrdertime(Date ordertime) {\n        this.ordertime = ordertime;\n    }\n\n    public Float getOldprice() {\n        return oldprice;\n    }\n\n    public void setOldprice(Float oldprice) {\n        this.oldprice = oldprice;\n    }\n\n    public Float getNewprice() {\n        return newprice;\n    }\n\n    public void setNewprice(Float newprice) {\n        this.newprice = newprice;\n    }\n\n    public Boolean getIspay() {\n        return ispay;\n    }\n\n    public void setIspay(Boolean ispay) {\n        this.ispay = ispay;\n    }\n\n    public Boolean getIssend() {\n        return issend;\n    }\n\n    public void setIssend(Boolean issend) {\n        this.issend = issend;\n    }\n\n    public Boolean getIsreceive() {\n        return isreceive;\n    }\n\n    public void setIsreceive(Boolean isreceive) {\n        this.isreceive = isreceive;\n    }\n\n    public Boolean getIscomplete() {\n        return iscomplete;\n    }\n\n    public void setIscomplete(Boolean iscomplete) {\n        this.iscomplete = iscomplete;\n    }\n\n    public Integer getAddressid() {\n        return addressid;\n    }\n\n    public void setAddressid(Integer addressid) {\n        this.addressid = addressid;\n    }\n\n    public List<Goods> getGoodsInfo() {\n        return goodsInfo;\n    }\n\n    public void setGoodsInfo(List<Goods> goodsInfo) {\n        this.goodsInfo = goodsInfo;\n    }\n\n    public Address getAddress() {\n        return address;\n    }\n\n    public void setAddress(Address address) {\n        this.address = address;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/OrderExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class OrderExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public OrderExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andOrderidIsNull() {\n            addCriterion(\"orderId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNotNull() {\n            addCriterion(\"orderId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidEqualTo(Integer value) {\n            addCriterion(\"orderId =\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotEqualTo(Integer value) {\n            addCriterion(\"orderId <>\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThan(Integer value) {\n            addCriterion(\"orderId >\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId >=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThan(Integer value) {\n            addCriterion(\"orderId <\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId <=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIn(List<Integer> values) {\n            addCriterion(\"orderId in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotIn(List<Integer> values) {\n            addCriterion(\"orderId not in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId not between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeIsNull() {\n            addCriterion(\"orderTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeIsNotNull() {\n            addCriterion(\"orderTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeEqualTo(Date value) {\n            addCriterion(\"orderTime =\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeNotEqualTo(Date value) {\n            addCriterion(\"orderTime <>\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeGreaterThan(Date value) {\n            addCriterion(\"orderTime >\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"orderTime >=\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeLessThan(Date value) {\n            addCriterion(\"orderTime <\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"orderTime <=\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeIn(List<Date> values) {\n            addCriterion(\"orderTime in\", values, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeNotIn(List<Date> values) {\n            addCriterion(\"orderTime not in\", values, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeBetween(Date value1, Date value2) {\n            addCriterion(\"orderTime between\", value1, value2, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"orderTime not between\", value1, value2, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceIsNull() {\n            addCriterion(\"oldPrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceIsNotNull() {\n            addCriterion(\"oldPrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceEqualTo(Float value) {\n            addCriterion(\"oldPrice =\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceNotEqualTo(Float value) {\n            addCriterion(\"oldPrice <>\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceGreaterThan(Float value) {\n            addCriterion(\"oldPrice >\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceGreaterThanOrEqualTo(Float value) {\n            addCriterion(\"oldPrice >=\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceLessThan(Float value) {\n            addCriterion(\"oldPrice <\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceLessThanOrEqualTo(Float value) {\n            addCriterion(\"oldPrice <=\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceIn(List<Float> values) {\n            addCriterion(\"oldPrice in\", values, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceNotIn(List<Float> values) {\n            addCriterion(\"oldPrice not in\", values, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceBetween(Float value1, Float value2) {\n            addCriterion(\"oldPrice between\", value1, value2, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceNotBetween(Float value1, Float value2) {\n            addCriterion(\"oldPrice not between\", value1, value2, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceIsNull() {\n            addCriterion(\"newPrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceIsNotNull() {\n            addCriterion(\"newPrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceEqualTo(Float value) {\n            addCriterion(\"newPrice =\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceNotEqualTo(Float value) {\n            addCriterion(\"newPrice <>\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceGreaterThan(Float value) {\n            addCriterion(\"newPrice >\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceGreaterThanOrEqualTo(Float value) {\n            addCriterion(\"newPrice >=\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceLessThan(Float value) {\n            addCriterion(\"newPrice <\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceLessThanOrEqualTo(Float value) {\n            addCriterion(\"newPrice <=\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceIn(List<Float> values) {\n            addCriterion(\"newPrice in\", values, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceNotIn(List<Float> values) {\n            addCriterion(\"newPrice not in\", values, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceBetween(Float value1, Float value2) {\n            addCriterion(\"newPrice between\", value1, value2, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceNotBetween(Float value1, Float value2) {\n            addCriterion(\"newPrice not between\", value1, value2, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayIsNull() {\n            addCriterion(\"isPay is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayIsNotNull() {\n            addCriterion(\"isPay is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayEqualTo(Boolean value) {\n            addCriterion(\"isPay =\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayNotEqualTo(Boolean value) {\n            addCriterion(\"isPay <>\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayGreaterThan(Boolean value) {\n            addCriterion(\"isPay >\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isPay >=\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayLessThan(Boolean value) {\n            addCriterion(\"isPay <\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isPay <=\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayIn(List<Boolean> values) {\n            addCriterion(\"isPay in\", values, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayNotIn(List<Boolean> values) {\n            addCriterion(\"isPay not in\", values, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isPay between\", value1, value2, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isPay not between\", value1, value2, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendIsNull() {\n            addCriterion(\"isSend is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendIsNotNull() {\n            addCriterion(\"isSend is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendEqualTo(Boolean value) {\n            addCriterion(\"isSend =\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendNotEqualTo(Boolean value) {\n            addCriterion(\"isSend <>\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendGreaterThan(Boolean value) {\n            addCriterion(\"isSend >\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isSend >=\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendLessThan(Boolean value) {\n            addCriterion(\"isSend <\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isSend <=\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendIn(List<Boolean> values) {\n            addCriterion(\"isSend in\", values, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendNotIn(List<Boolean> values) {\n            addCriterion(\"isSend not in\", values, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isSend between\", value1, value2, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isSend not between\", value1, value2, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveIsNull() {\n            addCriterion(\"isReceive is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveIsNotNull() {\n            addCriterion(\"isReceive is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveEqualTo(Boolean value) {\n            addCriterion(\"isReceive =\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveNotEqualTo(Boolean value) {\n            addCriterion(\"isReceive <>\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveGreaterThan(Boolean value) {\n            addCriterion(\"isReceive >\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isReceive >=\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveLessThan(Boolean value) {\n            addCriterion(\"isReceive <\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isReceive <=\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveIn(List<Boolean> values) {\n            addCriterion(\"isReceive in\", values, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveNotIn(List<Boolean> values) {\n            addCriterion(\"isReceive not in\", values, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isReceive between\", value1, value2, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isReceive not between\", value1, value2, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteIsNull() {\n            addCriterion(\"isComplete is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteIsNotNull() {\n            addCriterion(\"isComplete is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteEqualTo(Boolean value) {\n            addCriterion(\"isComplete =\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteNotEqualTo(Boolean value) {\n            addCriterion(\"isComplete <>\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteGreaterThan(Boolean value) {\n            addCriterion(\"isComplete >\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isComplete >=\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteLessThan(Boolean value) {\n            addCriterion(\"isComplete <\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isComplete <=\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteIn(List<Boolean> values) {\n            addCriterion(\"isComplete in\", values, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteNotIn(List<Boolean> values) {\n            addCriterion(\"isComplete not in\", values, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isComplete between\", value1, value2, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isComplete not between\", value1, value2, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIsNull() {\n            addCriterion(\"addressId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIsNotNull() {\n            addCriterion(\"addressId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidEqualTo(Integer value) {\n            addCriterion(\"addressId =\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotEqualTo(Integer value) {\n            addCriterion(\"addressId <>\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThan(Integer value) {\n            addCriterion(\"addressId >\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"addressId >=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThan(Integer value) {\n            addCriterion(\"addressId <\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"addressId <=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIn(List<Integer> values) {\n            addCriterion(\"addressId in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotIn(List<Integer> values) {\n            addCriterion(\"addressId not in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressId between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressId not between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/OrderItem.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class OrderItem {\n    private Integer itemid;\n\n    private Integer orderid;\n\n    private Integer goodsid;\n\n    private Integer num;\n\n    public OrderItem() {\n    }\n\n    public OrderItem(Integer itemid, Integer orderid, Integer goodsid, Integer num) {\n\n        this.itemid = itemid;\n        this.orderid = orderid;\n        this.goodsid = goodsid;\n        this.num = num;\n    }\n\n    public Integer getItemid() {\n        return itemid;\n    }\n\n    public void setItemid(Integer itemid) {\n        this.itemid = itemid;\n    }\n\n    public Integer getOrderid() {\n        return orderid;\n    }\n\n    public void setOrderid(Integer orderid) {\n        this.orderid = orderid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n\n    public Integer getNum() {\n        return num;\n    }\n\n    public void setNum(Integer num) {\n        this.num = num;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/OrderItemExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class OrderItemExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public OrderItemExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andItemidIsNull() {\n            addCriterion(\"itemId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidIsNotNull() {\n            addCriterion(\"itemId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidEqualTo(Integer value) {\n            addCriterion(\"itemId =\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidNotEqualTo(Integer value) {\n            addCriterion(\"itemId <>\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidGreaterThan(Integer value) {\n            addCriterion(\"itemId >\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"itemId >=\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidLessThan(Integer value) {\n            addCriterion(\"itemId <\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"itemId <=\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidIn(List<Integer> values) {\n            addCriterion(\"itemId in\", values, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidNotIn(List<Integer> values) {\n            addCriterion(\"itemId not in\", values, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidBetween(Integer value1, Integer value2) {\n            addCriterion(\"itemId between\", value1, value2, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"itemId not between\", value1, value2, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNull() {\n            addCriterion(\"orderId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNotNull() {\n            addCriterion(\"orderId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidEqualTo(Integer value) {\n            addCriterion(\"orderId =\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotEqualTo(Integer value) {\n            addCriterion(\"orderId <>\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThan(Integer value) {\n            addCriterion(\"orderId >\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId >=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThan(Integer value) {\n            addCriterion(\"orderId <\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId <=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIn(List<Integer> values) {\n            addCriterion(\"orderId in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotIn(List<Integer> values) {\n            addCriterion(\"orderId not in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId not between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNull() {\n            addCriterion(\"num is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNotNull() {\n            addCriterion(\"num is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumEqualTo(Integer value) {\n            addCriterion(\"num =\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotEqualTo(Integer value) {\n            addCriterion(\"num <>\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThan(Integer value) {\n            addCriterion(\"num >\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"num >=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThan(Integer value) {\n            addCriterion(\"num <\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"num <=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIn(List<Integer> values) {\n            addCriterion(\"num in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotIn(List<Integer> values) {\n            addCriterion(\"num not in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumBetween(Integer value1, Integer value2) {\n            addCriterion(\"num between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"num not between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/ShopCart.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class ShopCart extends ShopCartKey {\n    private Date catedate;\n\n    private Integer goodsnum;\n\n    public Date getCatedate() {\n        return catedate;\n    }\n\n    public void setCatedate(Date catedate) {\n        this.catedate = catedate;\n    }\n\n    public Integer getGoodsnum() {\n        return goodsnum;\n    }\n\n    public void setGoodsnum(Integer goodsnum) {\n        this.goodsnum = goodsnum;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/ShopCartExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class ShopCartExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ShopCartExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsid is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsid is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsid =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsid <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsid >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsid >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsid <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsid <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsid in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsid not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsid between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsid not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateIsNull() {\n            addCriterion(\"cateDate is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateIsNotNull() {\n            addCriterion(\"cateDate is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateEqualTo(Date value) {\n            addCriterion(\"cateDate =\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateNotEqualTo(Date value) {\n            addCriterion(\"cateDate <>\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateGreaterThan(Date value) {\n            addCriterion(\"cateDate >\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"cateDate >=\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateLessThan(Date value) {\n            addCriterion(\"cateDate <\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateLessThanOrEqualTo(Date value) {\n            addCriterion(\"cateDate <=\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateIn(List<Date> values) {\n            addCriterion(\"cateDate in\", values, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateNotIn(List<Date> values) {\n            addCriterion(\"cateDate not in\", values, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateBetween(Date value1, Date value2) {\n            addCriterion(\"cateDate between\", value1, value2, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateNotBetween(Date value1, Date value2) {\n            addCriterion(\"cateDate not between\", value1, value2, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumIsNull() {\n            addCriterion(\"goodsNum is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumIsNotNull() {\n            addCriterion(\"goodsNum is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumEqualTo(Integer value) {\n            addCriterion(\"goodsNum =\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumNotEqualTo(Integer value) {\n            addCriterion(\"goodsNum <>\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumGreaterThan(Integer value) {\n            addCriterion(\"goodsNum >\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsNum >=\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumLessThan(Integer value) {\n            addCriterion(\"goodsNum <\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsNum <=\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumIn(List<Integer> values) {\n            addCriterion(\"goodsNum in\", values, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumNotIn(List<Integer> values) {\n            addCriterion(\"goodsNum not in\", values, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsNum between\", value1, value2, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsNum not between\", value1, value2, \"goodsnum\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/ShopCartKey.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class ShopCartKey {\n    private Integer userid;\n\n    private Integer goodsid;\n\n    public ShopCartKey() {\n    }\n\n    public ShopCartKey(Integer userid, Integer goodsid) {\n\n        this.userid = userid;\n        this.goodsid = goodsid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/User.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class User {\n    private Integer userid;\n\n    private String username;\n\n    private String password;\n\n    private Date regtime;\n\n    private String email;\n\n    private String telephone;\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public String getUsername() {\n        return username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username == null ? null : username.trim();\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password == null ? null : password.trim();\n    }\n\n    public Date getRegtime() {\n        return regtime;\n    }\n\n    public void setRegtime(Date regtime) {\n        this.regtime = regtime;\n    }\n\n    public String getEmail() {\n        return email;\n    }\n\n    public void setEmail(String email) {\n        this.email = email == null ? null : email.trim();\n    }\n\n    public String getTelephone() {\n        return telephone;\n    }\n\n    public void setTelephone(String telephone) {\n        this.telephone = telephone == null ? null : telephone.trim();\n    }\n\n    @Override\n    public String toString() {\n        return \"User{\" +\n                \"userid=\" + userid +\n                \", username='\" + username + '\\'' +\n                \", password='\" + password + '\\'' +\n                \", regtime=\" + regtime +\n                \", email='\" + email + '\\'' +\n                \", telephone='\" + telephone + '\\'' +\n                '}';\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/entity/UserExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class UserExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public UserExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameIsNull() {\n            addCriterion(\"username is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameIsNotNull() {\n            addCriterion(\"username is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameEqualTo(String value) {\n            addCriterion(\"username =\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotEqualTo(String value) {\n            addCriterion(\"username <>\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameGreaterThan(String value) {\n            addCriterion(\"username >\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"username >=\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameLessThan(String value) {\n            addCriterion(\"username <\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameLessThanOrEqualTo(String value) {\n            addCriterion(\"username <=\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameLike(String value) {\n            addCriterion(\"username like\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotLike(String value) {\n            addCriterion(\"username not like\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameIn(List<String> values) {\n            addCriterion(\"username in\", values, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotIn(List<String> values) {\n            addCriterion(\"username not in\", values, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameBetween(String value1, String value2) {\n            addCriterion(\"username between\", value1, value2, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotBetween(String value1, String value2) {\n            addCriterion(\"username not between\", value1, value2, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNull() {\n            addCriterion(\"password is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNotNull() {\n            addCriterion(\"password is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordEqualTo(String value) {\n            addCriterion(\"password =\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotEqualTo(String value) {\n            addCriterion(\"password <>\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThan(String value) {\n            addCriterion(\"password >\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThanOrEqualTo(String value) {\n            addCriterion(\"password >=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThan(String value) {\n            addCriterion(\"password <\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThanOrEqualTo(String value) {\n            addCriterion(\"password <=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLike(String value) {\n            addCriterion(\"password like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotLike(String value) {\n            addCriterion(\"password not like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIn(List<String> values) {\n            addCriterion(\"password in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotIn(List<String> values) {\n            addCriterion(\"password not in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordBetween(String value1, String value2) {\n            addCriterion(\"password between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotBetween(String value1, String value2) {\n            addCriterion(\"password not between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeIsNull() {\n            addCriterion(\"regTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeIsNotNull() {\n            addCriterion(\"regTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeEqualTo(Date value) {\n            addCriterion(\"regTime =\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeNotEqualTo(Date value) {\n            addCriterion(\"regTime <>\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeGreaterThan(Date value) {\n            addCriterion(\"regTime >\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"regTime >=\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeLessThan(Date value) {\n            addCriterion(\"regTime <\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"regTime <=\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeIn(List<Date> values) {\n            addCriterion(\"regTime in\", values, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeNotIn(List<Date> values) {\n            addCriterion(\"regTime not in\", values, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeBetween(Date value1, Date value2) {\n            addCriterion(\"regTime between\", value1, value2, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"regTime not between\", value1, value2, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailIsNull() {\n            addCriterion(\"email is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailIsNotNull() {\n            addCriterion(\"email is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailEqualTo(String value) {\n            addCriterion(\"email =\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotEqualTo(String value) {\n            addCriterion(\"email <>\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailGreaterThan(String value) {\n            addCriterion(\"email >\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailGreaterThanOrEqualTo(String value) {\n            addCriterion(\"email >=\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailLessThan(String value) {\n            addCriterion(\"email <\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailLessThanOrEqualTo(String value) {\n            addCriterion(\"email <=\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailLike(String value) {\n            addCriterion(\"email like\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotLike(String value) {\n            addCriterion(\"email not like\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailIn(List<String> values) {\n            addCriterion(\"email in\", values, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotIn(List<String> values) {\n            addCriterion(\"email not in\", values, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailBetween(String value1, String value2) {\n            addCriterion(\"email between\", value1, value2, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotBetween(String value1, String value2) {\n            addCriterion(\"email not between\", value1, value2, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneIsNull() {\n            addCriterion(\"telephone is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneIsNotNull() {\n            addCriterion(\"telephone is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneEqualTo(String value) {\n            addCriterion(\"telephone =\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotEqualTo(String value) {\n            addCriterion(\"telephone <>\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneGreaterThan(String value) {\n            addCriterion(\"telephone >\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneGreaterThanOrEqualTo(String value) {\n            addCriterion(\"telephone >=\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneLessThan(String value) {\n            addCriterion(\"telephone <\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneLessThanOrEqualTo(String value) {\n            addCriterion(\"telephone <=\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneLike(String value) {\n            addCriterion(\"telephone like\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotLike(String value) {\n            addCriterion(\"telephone not like\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneIn(List<String> values) {\n            addCriterion(\"telephone in\", values, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotIn(List<String> values) {\n            addCriterion(\"telephone not in\", values, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneBetween(String value1, String value2) {\n            addCriterion(\"telephone between\", value1, value2, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotBetween(String value1, String value2) {\n            addCriterion(\"telephone not between\", value1, value2, \"telephone\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/ActivityService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\n\nimport java.util.List;\n\npublic interface ActivityService {\n    List<Activity> getAllActivity(ActivityExample activityExample);\n\n    void insertActivitySelective(Activity activity);\n\n    Activity selectByKey(Integer activityid);\n\n    void deleteByActivityId(Integer activityid);\n\n//    void updateGoodsActSelective(Goods goods);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/AddressService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\nimport com.zhang.ssmschoolshop.entity.Address;\nimport com.zhang.ssmschoolshop.entity.AddressExample;\n\nimport java.util.List;\n\npublic interface AddressService {\n    public List<Address> getAllAddressByExample(AddressExample addressExample);\n\n    public void updateByPrimaryKeySelective(Address address);\n\n    public void deleteByPrimaryKey(Integer addressid);\n\n    public void insert(Address address);\n\n    public void  insertSelective(Address address);\n\n    public Address selectByPrimaryKey(Integer addressid);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/AdminService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Admin;\n\npublic interface AdminService {\n    public Admin selectByName(Admin admin);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/CateService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Category;\nimport com.zhang.ssmschoolshop.entity.CategoryExample;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"CateService\")\npublic interface CateService {\n    public List<Category> selectByExample(CategoryExample example);\n    public void insertSelective(Category category);\n\n    public List<Category> selectByExampleLimit(CategoryExample digCategoryExample);\n\n    public Category selectById(Integer category);\n\n    public void updateByPrimaryKeySelective(Category category);\n\n    public void deleteByPrimaryKey(Integer cateid);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/CommentService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Comment;\nimport com.zhang.ssmschoolshop.entity.CommentExample;\n\nimport java.util.List;\n\npublic interface CommentService {\n    public void insertSelective(Comment comment);\n\n    public List<Comment> selectByExample(CommentExample commentExample);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/EmailService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n/**\n * @author codingzx\n * @description\n * @date 2021/7/24 12:58\n */\npublic interface EmailService {\n    /**\n     * 用户购买成功后 发送邮件给管理员\n     */\n    public void sendEmailToAdmin();\n\n    /**\n     * 管理员发货后 发送邮件给用户\n     */\n    public void sendEmailToUser();\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/GoodsService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\n\nimport java.util.List;\n\npublic interface GoodsService {\n    public Integer addGoods(Goods goods);\n\n    public void addImagePath(ImagePath imagePath);\n\n    public List<Goods> selectByExample(GoodsExample example);\n\n    public void deleteGoodsById(Integer goodsid);\n\n    public void updateGoodsById(Goods goods);\n\n    public List<ImagePath> findImagePath(Integer goodsid);\n\n    public Goods selectById(Integer goodsid);\n\n    public List<Goods> selectByExampleLimit(GoodsExample digGoodsExample);\n\n    public void addFavorite(Favorite favorite);\n\n    public Favorite selectFavByKey(FavoriteKey favoriteKey);\n\n    public void deleteFavByKey(FavoriteKey favoriteKey);\n\n    public List<Favorite> selectFavByExample(FavoriteExample favoriteExample);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/OrderService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\n\nimport com.zhang.ssmschoolshop.entity.*;\n\nimport java.util.List;\n\n\npublic interface OrderService {\n    public void insertOrder(Order order);\n\n    public void deleteById(Integer orderid);\n\n\n    public List<Order> selectOrderByExample(OrderExample orderExample);\n\n    public List<OrderItem> getOrderItemByExample(OrderItemExample orderItemExample);\n\n    public Address getAddressByKey(Integer addressid);\n\n    public void updateOrderByKey(Order order);\n\n    public Order selectByPrimaryKey(Integer orderid);\n\n    void insertOrderItem(OrderItem orderItem);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/ShopCartService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.ShopCart;\nimport com.zhang.ssmschoolshop.entity.ShopCartExample;\nimport com.zhang.ssmschoolshop.entity.ShopCartKey;\n\nimport java.util.List;\n\npublic interface ShopCartService {\n    public void addShopCart(ShopCart shopCart);\n\n    public List<ShopCart> selectByExample(ShopCartExample shopCartExample);\n\n    public void deleteByKey(ShopCartKey shopCartKey);\n\n    public void updateCartByKey(ShopCart shopCart);\n\n    public ShopCart selectCartByKey(ShopCartKey shopCartKey);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/UserService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\n\nimport java.util.List;\n\npublic interface UserService {\n    public User selectByPrimaryKey(int userId);\n    /*public User selectByPrimaryKeyAndPassword(int userId,String password);*/\n    public List<User> selectByExample(UserExample userExample);\n\n    public void insertSelective(User user);\n\n    public void deleteUserById(Integer userid);\n\n    public void updateByPrimaryKeySelective(User user);\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/ActivityServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.ActivityMapper;\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\nimport com.zhang.ssmschoolshop.service.ActivityService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"activityService\")\npublic class ActivityServiceImpl implements ActivityService {\n\n    @Autowired(required = false)\n    ActivityMapper activityMapper;\n\n    public List<Activity> getAllActivity(ActivityExample activityExample) {\n        return activityMapper.selectByExample(activityExample);\n    }\n\n    @Override\n    public void insertActivitySelective(Activity activity) {\n        activityMapper.insertSelective(activity);\n    }\n\n    @Override\n    public Activity selectByKey(Integer activityid) {\n        return activityMapper.selectByPrimaryKey(activityid);\n    }\n\n    @Override\n    public void deleteByActivityId(Integer activityid) {\n        activityMapper.deleteByPrimaryKey(activityid);\n    }\n\n    /*@Override\n    public void updateGoodsActSelective(Goods goods) {\n\n    }*/\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/AddressServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.AddressMapper;\nimport com.zhang.ssmschoolshop.entity.Address;\nimport com.zhang.ssmschoolshop.entity.AddressExample;\nimport com.zhang.ssmschoolshop.service.AddressService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"addressService\")\npublic class AddressServiceImpl implements AddressService {\n\n    @Autowired(required = false)\n    private AddressMapper addressMapper;\n\n    @Override\n    public List<Address> getAllAddressByExample(AddressExample addressExample) {\n        return addressMapper.selectByExample(addressExample);\n    }\n\n    @Override\n    public void updateByPrimaryKeySelective(Address address) {\n        addressMapper.updateByPrimaryKeySelective(address);\n    }\n\n    @Override\n    public void deleteByPrimaryKey(Integer addressid) {\n        addressMapper.deleteByPrimaryKey(addressid);\n    }\n\n    @Override\n    public void insert(Address address) {\n        addressMapper.insert(address);\n    }\n\n    @Override\n    public void insertSelective(Address address) {\n        addressMapper.insertSelective(address);\n    }\n\n    @Override\n    public Address selectByPrimaryKey(Integer addressid) {\n        return addressMapper.selectByPrimaryKey(addressid);\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/AdminServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.AdminMapper;\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.service.AdminService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n@Service(\"adminService\")\npublic class AdminServiceImpl implements AdminService {\n\n    @Autowired(required = false)\n    private AdminMapper adminMapper;\n\n    @Override\n    public Admin selectByName(Admin admin) {\n        return adminMapper.selectByName(admin);\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/CateServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.CategoryMapper;\nimport com.zhang.ssmschoolshop.entity.Category;\nimport com.zhang.ssmschoolshop.entity.CategoryExample;\nimport com.zhang.ssmschoolshop.service.CateService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"cateService\")\npublic class CateServiceImpl implements CateService {\n\n    @Autowired(required = false)\n    CategoryMapper categoryMapper;\n\n    @Override\n    public List<Category> selectByExample(CategoryExample example) {\n        return categoryMapper.selectByExample(example);\n    }\n\n    @Override\n    public void insertSelective(Category category) {\n        categoryMapper.insertSelective(category);\n    }\n\n    @Override\n    public List<Category> selectByExampleLimit(CategoryExample digCategoryExample) {\n        return categoryMapper.selectByExampleLimit(digCategoryExample);\n    }\n\n    @Override\n    public Category selectById(Integer category) {\n        return categoryMapper.selectByPrimaryKey(category);\n    }\n\n    @Override\n    public void updateByPrimaryKeySelective(Category category) {\n        categoryMapper.updateByPrimaryKeySelective(category);\n    }\n\n    @Override\n    public void deleteByPrimaryKey(Integer cateid) {\n        categoryMapper.deleteByPrimaryKey(cateid);\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/CommentServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.CommentMapper;\nimport com.zhang.ssmschoolshop.entity.Comment;\nimport com.zhang.ssmschoolshop.entity.CommentExample;\nimport com.zhang.ssmschoolshop.service.CommentService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"commentService\")\npublic class CommentServiceImpl implements CommentService {\n\n    @Autowired(required = false)\n    private CommentMapper commentMapper;\n\n    @Override\n    public void insertSelective(Comment comment){\n        commentMapper.insertSelective(comment);\n    }\n\n    @Override\n    public List<Comment> selectByExample(CommentExample commentExample) {\n        return commentMapper.selectByExample(commentExample);\n    }\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/EmailServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.entity.EmailSend;\nimport com.zhang.ssmschoolshop.service.EmailService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.mail.MailException;\nimport org.springframework.mail.MailSender;\nimport org.springframework.mail.SimpleMailMessage;\nimport org.springframework.stereotype.Component;\nimport org.springframework.stereotype.Service;\n\nimport java.time.LocalDate;\n\n/**\n * @author codingzx\n * @description 发送邮件的服务\n * @link sendEmailToAdmin  用户下单后 发送邮件给管理员\n * @link sendEmailToUser   管理员发送后通知用户\n * @date 2021/7/24 12:59\n */\n@Service(\"emailService\")\n@Component\npublic class EmailServiceImpl implements EmailService {\n\n    private static final Logger log = LoggerFactory.getLogger(EmailServiceImpl.class);\n\n    @Value(\"${mail.username}\")\n    private String sender;\n\n    @Value(\"${mail.receive}\")\n    private String receiver;\n\n    @Value(\"${mail.receive2}\")\n    private String twoDog;\n\n    @Autowired\n    MailSender mailSender;\n\n    public EmailServiceImpl() {\n    }\n\n    public EmailServiceImpl(MailSender mailSender) {\n        this.mailSender = mailSender;\n    }\n\n    @Override\n    public void sendEmailToAdmin() {\n        EmailSend emailSend = new EmailSend();\n        emailSend.setSubject(\"用户购买信息\");\n        emailSend.setContent(\"today is \" + LocalDate.now() + \",有新用户购买\");\n//        emailSend.setReceivers();\n        log.info(\"开始发送邮件了\");\n        SimpleMailMessage message = new SimpleMailMessage();\n        //谁发的\n        message.setFrom(sender);\n        //谁要接收\n        message.setTo(receiver);\n        //邮件标题\n        message.setSubject(emailSend.getSubject());\n        //邮件内容\n        message.setText(emailSend.getContent());\n        try {\n            mailSender.send(message);\n        } catch (MailException e) {\n            e.printStackTrace();\n        }\n\n    }\n\n    @Override\n    public void sendEmailToUser() {\n\n        EmailSend emailSend = new EmailSend();\n        emailSend.setSubject(\"管理员已经发货\");\n        emailSend.setContent(\"today is \" + LocalDate.now() + \",商城已经发货\");\n//        emailSend.setReceivers();\n        log.info(\"开始发送邮件了\");\n        SimpleMailMessage message = new SimpleMailMessage();\n        //谁发的\n        message.setFrom(receiver);\n        //谁要接收\n        message.setTo(sender);\n        //邮件标题\n        message.setSubject(emailSend.getSubject());\n        //邮件内容\n        message.setText(emailSend.getContent());\n        try {\n            mailSender.send(message);\n        } catch (MailException e) {\n            e.printStackTrace();\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/GoodsServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.FavoriteMapper;\nimport com.zhang.ssmschoolshop.dao.GoodsMapper;\nimport com.zhang.ssmschoolshop.dao.ImagePathMapper;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"goodsService\")\npublic class GoodsServiceImpl implements GoodsService {\n\n    @Autowired(required = false)\n    GoodsMapper goodsMapper;\n\n    @Autowired(required = false)\n    ImagePathMapper imagePathMapper;\n\n    @Autowired(required = false)\n    FavoriteMapper favoriteMapper;\n\n    @Override\n    public Integer addGoods(Goods goods) {\n        goodsMapper.insertSelective(goods);\n        return goods.getGoodsid();\n    }\n\n    @Override\n    public void addImagePath(ImagePath imagePath) {\n        imagePathMapper.insertSelective(imagePath);\n    }\n\n    @Override\n    public List<Goods> selectByExample(GoodsExample example) {\n        return goodsMapper.selectByExampleWithBLOBs(example);\n    }\n\n    @Override\n    public void deleteGoodsById(Integer goodsid) {\n\n        goodsMapper.deleteByPrimaryKey(goodsid);\n    }\n\n    @Override\n    public void updateGoodsById(Goods goods) {\n        goodsMapper.updateByPrimaryKeySelective(goods);\n    }\n\n    @Override\n    public List<ImagePath> findImagePath(Integer goodsid) {\n        ImagePathExample imagePathExample = new ImagePathExample();\n        imagePathExample.or().andGoodidEqualTo(goodsid);\n\n        return imagePathMapper.selectByExample(imagePathExample);\n    }\n\n    @Override\n    public Goods selectById(Integer goodsid) {\n        return goodsMapper.selectByPrimaryKey(goodsid);\n    }\n\n    @Override\n    public List<Goods> selectByExampleLimit(GoodsExample digGoodsExample) {\n        return goodsMapper.selectByExampleWithBLOBsLimit(digGoodsExample);\n    }\n\n    @Override\n    public void addFavorite(Favorite favorite) {\n        favoriteMapper.insertSelective(favorite);\n    }\n\n    @Override\n    public Favorite selectFavByKey(FavoriteKey favoriteKey) {\n        return favoriteMapper.selectByPrimaryKey(favoriteKey);\n    }\n\n    @Override\n    public void deleteFavByKey(FavoriteKey favoriteKey) {\n        favoriteMapper.deleteByPrimaryKey(favoriteKey);\n    }\n\n    @Override\n    public List<Favorite> selectFavByExample(FavoriteExample favoriteExample) {\n        return favoriteMapper.selectByExample(favoriteExample);\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/OrderServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.AddressMapper;\nimport com.zhang.ssmschoolshop.dao.OrderItemMapper;\nimport com.zhang.ssmschoolshop.dao.OrderMapper;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.OrderService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"orderService\")\npublic class OrderServiceImpl implements OrderService {\n\n    @Autowired(required = false)\n    private OrderMapper orderMapper;\n\n    @Autowired(required = false)\n    private OrderItemMapper orderItemMapper;\n\n    @Autowired(required = false)\n    private AddressMapper addressMapper;\n\n    @Override\n    public void insertOrder(Order order) {\n        orderMapper.insertSelective(order);\n    }\n\n    @Override\n    public void deleteById(Integer orderid) {\n        orderMapper.deleteByPrimaryKey(orderid);\n    }\n\n\n    @Override\n    public List<Order> selectOrderByExample(OrderExample orderExample) {\n        return orderMapper.selectByExample(orderExample);\n    }\n\n    @Override\n    public List<OrderItem> getOrderItemByExample(OrderItemExample orderItemExample) {\n        return orderItemMapper.selectByExample(orderItemExample);\n    }\n\n    @Override\n    public Address getAddressByKey(Integer addressid) {\n        return addressMapper.selectByPrimaryKey(addressid);\n    }\n\n    @Override\n    public void updateOrderByKey(Order order) {\n        orderMapper.updateByPrimaryKeySelective(order);\n    }\n\n    @Override\n    public Order selectByPrimaryKey(Integer orderid) {\n        return orderMapper.selectByPrimaryKey(orderid);\n    }\n\n    @Override\n    public void insertOrderItem(OrderItem orderItem) {\n        orderItemMapper.insertSelective(orderItem);\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/ShopCartServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.ShopCartMapper;\nimport com.zhang.ssmschoolshop.entity.ShopCart;\nimport com.zhang.ssmschoolshop.entity.ShopCartExample;\nimport com.zhang.ssmschoolshop.entity.ShopCartKey;\nimport com.zhang.ssmschoolshop.service.ShopCartService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"addShopCart\")\npublic class ShopCartServiceImpl implements ShopCartService {\n\n    @Autowired(required = false)\n    ShopCartMapper shopCartMapper;\n\n    @Override\n    public void addShopCart(ShopCart shopCart) {\n        shopCartMapper.insertSelective(shopCart);\n    }\n\n    @Override\n    public List<ShopCart> selectByExample(ShopCartExample shopCartExample) {\n        return shopCartMapper.selectByExample(shopCartExample);\n    }\n\n    @Override\n    public void deleteByKey(ShopCartKey shopCartKey) {\n        shopCartMapper.deleteByPrimaryKey(shopCartKey);\n    }\n\n    @Override\n    public void updateCartByKey(ShopCart shopCart) {\n        shopCartMapper.updateByPrimaryKeySelective(shopCart);\n    }\n\n    @Override\n    public ShopCart selectCartByKey(ShopCartKey shopCartKey) {\n        return shopCartMapper.selectByPrimaryKey(shopCartKey);\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/service/impl/UserServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.UserMapper;\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"userService\")\npublic class UserServiceImpl implements UserService {\n\n    @Autowired(required = false)\n    private UserMapper userMapper;\n\n    @Override\n    public User selectByPrimaryKey(int userId) {\n        return  userMapper.selectByPrimaryKey(userId);\n    }\n\n    @Override\n    public List<User> selectByExample(UserExample userExample) {\n        return userMapper.selectByExample(userExample);\n    }\n\n    @Override\n    public void insertSelective(User user) {\n        userMapper.insertSelective(user);\n    }\n\n    @Override\n    public void deleteUserById(Integer userid) {\n        userMapper.deleteByPrimaryKey(userid);\n    }\n\n    @Override\n    public void updateByPrimaryKeySelective(User user) {\n        userMapper.updateByPrimaryKeySelective(user);\n    }\n\n\n\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ExcelUtils.java",
    "content": "package com.zhang.ssmschoolshop.util;\n\n/**\n * @author codingzx\n * @description\n * @date 2021/4/11 11:23\n */\n\nimport com.zhang.ssmschoolshop.annotinon.ExportEntityMap;\nimport com.zhang.ssmschoolshop.entity.Goods;\nimport lombok.extern.slf4j.Slf4j;\n\nimport org.apache.poi.hssf.usermodel.*;\nimport org.apache.poi.ss.formula.functions.T;\nimport org.apache.poi.ss.usermodel.Footer;\nimport org.apache.poi.ss.usermodel.Header;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.StringUtils;\n\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.io.UnsupportedEncodingException;\nimport java.lang.reflect.Field;\nimport java.nio.charset.StandardCharsets;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\nimport java.text.SimpleDateFormat;\n\nimport java.util.*;\n\n/**\n * @ClassName : ExportExcelUtils2\n * @Description :\n * @Author : ASUS\n * @Date 2020/3/18\n * @Version 1.0\n **/\n@Slf4j\npublic class ExcelUtils {\n    private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class);\n\n    /**\n     * 导出Excel\n     *\n     * @param excelName 要导出的excel名称\n     * @param list      要导出的数据集合\n     * @param c         中英文字段对应Map，即要导出的excel表头\n     * @param response  使用response可以导出到浏览器\n     * @param <T>\n     */\n    public static <T> void export(String excelName, List<T> list, Class<T> c, HttpServletResponse response) {\n        SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd HH：mm：ss\");// 设置日期格式\n        // 设置默认文件名为当前时间：年月日时分秒\n        if (excelName == null || excelName == \"\") {\n            excelName = df.format(new Date()).toString();\n        } else {\n            excelName = excelName + df.format(new Date()).toString();\n        }\n        // 设置response头信息\n        response.reset();\n        response.setContentType(\"application/vnd.ms-excel\"); // 改成输出excel文件\n        try {\n            response.setHeader(\"Content-disposition\", \"attachment; filename=\"\n                    + new String(excelName.getBytes(\"gb2312\"), \"ISO-8859-1\") + \".xls\");\n        } catch (UnsupportedEncodingException e1) {\n            //logger.info(e1.getMessage());\n        }\n\n        try {\n            //创建一个WorkBook,对应一个Excel文件\n            HSSFWorkbook wb = new HSSFWorkbook();\n            //在Workbook中，创建一个sheet，对应Excel中的工作薄（sheet）\n            HSSFSheet sheet = wb.createSheet(excelName);\n            //设置 边距、页眉、页脚\n\n//            HSSFPrintSetup printSetup = (HSSFPrintSetup) sheet.getPrintSetup();\n            HSSFPrintSetup printSetup = sheet.getPrintSetup();\n            //// 打印方向，true：横向，false：纵向(默认)\n            printSetup.setLandscape(true);\n            printSetup.setHeaderMargin(0.2);\n            printSetup.setFooterMargin(0.2);\n            //设置打印缩放为88%\n            //printSetup.setScale((short) 55);\n            printSetup.setFitHeight((short) 0);\n            printSetup.setFitWidth((short) 1);\n            // printSetup.setLeftToRight(true);//列从左向右显示②\n            printSetup.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); // 纸张\n            sheet.setMargin(HSSFSheet.BottomMargin, (double) 0.8);// 页边距（下）\n            sheet.setMargin(HSSFSheet.LeftMargin, (double) 0);// 页边距（左）\n            sheet.setMargin(HSSFSheet.RightMargin, (double) 0);// 页边距（右）\n            sheet.setMargin(HSSFSheet.TopMargin, (double) 0.8);// 页边距（上）\n            sheet.setHorizontallyCenter(true);//设置打印页面为水平居中\n            sheet.setVerticallyCenter(true);\n            sheet.setAutobreaks(false);\n            sheet.setFitToPage(false);\n            Footer footer = sheet.getFooter();\n            //设置页数\n            footer.setCenter(\"第\" + HeaderFooter.page() + \"页，共 \" + HeaderFooter.numPages() + \"页\");\n            Header header = sheet.getHeader();\n            //自定义页眉,并设置页眉 左中右显示信息\n            //居中\n//            header.setCenter(\"Center Header\");\n            //靠左\n            header.setLeft(HSSFHeader.font(\"宋体\", \"\") +\n                    HSSFHeader.fontSize((short) 16) + excelName + \".xls\");\n            //靠右\n//            header.setRight(HSSFHeader.font(\"Stencil-Normal\", \"Italic\") +\n//                    HSSFHeader.fontSize((short) 16) + \"Right w/ Stencil-Normal Italic font and size 16\");\n\n            //创建单元格，并设置值表头 设置表头居中\n            HSSFCellStyle style = wb.createCellStyle();\n            //设置边框\n//            style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框\n//            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框\n//            style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框\n//            style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框\n            //自动换行\n            //style.setWrapText(true);\n            //创建一个居中格式\n//            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);\n//            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中\n            //设置字体\n            HSSFFont font = wb.createFont();\n            font.setFontName(\"宋体\");\n\n            style.setFont(font);\n            // 填充工作表\n            //获取需要转出的excel表头的map字段\n            LinkedHashMap<String, String> fieldMap = new LinkedHashMap<>();\n            //循环注解里面的值 填入Link集合\n            Field[] declaredFields = c.getDeclaredFields();\n\n            for (Field declaredField : declaredFields) {\n                //获取注解对象\n                ExportEntityMap declaredAnnotation = declaredField.getDeclaredAnnotation(ExportEntityMap.class);\n                if (declaredAnnotation != null) {\n                    fieldMap.put(declaredAnnotation.EnName(), declaredAnnotation.CnName());\n                }\n            }\n            fillSheet(sheet, list, fieldMap, style);\n            //将文件输出\n            /**\n             * getOutputStream()是以字节流的方式写出数据\n             * 浏览器得有对应的编码表来把字节流解析为字符\n             * 而如果又实用getWriter（）来以字符的形式写出，\n             * 编码变冲突。。所有规范两者不能同时使用\n             */\n            OutputStream ouputStream = response.getOutputStream();\n            wb.write(ouputStream);\n            ouputStream.flush();\n            ouputStream.close();\n\n        } catch (Exception e) {\n            System.err.println(\"导出Excel失败！\");\n            System.err.println(e.getMessage());\n        }\n    }\n\n    /**\n     * 根据字段名获取字段对象\n     *\n     * @param fieldName 字段名\n     * @param clazz     包含该字段的类\n     * @return 字段\n     */\n    public static Field getFieldByName(String fieldName, Class<?> clazz) {\n        logger.info(\"根据字段名获取字段对象:getFieldByName()\");\n        // 拿到本类的所有字段\n        Field[] selfFields = clazz.getDeclaredFields();\n        // 如果本类中存在该字段，则返回\n        for (Field field : selfFields) {\n            //如果本类中存在该字段，则返回\n            if (field.getName().equals(fieldName)) {\n                return field;\n            }\n        }\n        // 否则，查看父类中是否存在此字段，如果有则返回\n        Class<?> superClazz = clazz.getSuperclass();\n        if (superClazz != null && superClazz != Object.class) {\n            //递归\n            return getFieldByName(fieldName, superClazz);\n        }\n        // 如果本类和父类都没有，则返回空\n        return null;\n    }\n\n    /**\n     * 根据字段名获取字段值\n     *\n     * @param fieldName 字段名\n     * @param o         对象\n     * @return 字段值\n     * @throws Exception 异常\n     */\n    public static Object getFieldValueByName(String fieldName, Object o)\n            throws Exception {\n        logger.info(\"根据字段名获取字段值:getFieldValueByName()\");\n        Object value = null;\n        //根据字段名得到字段对象\n        Field field = getFieldByName(fieldName, o.getClass());\n        //如果该字段存在，则取出该字段的值\n        if (field != null) {\n            field.setAccessible(true);//类中的成员变量为private,在类外边使用属性值，故必须进行此操作\n            value = field.get(o);//获取当前对象中当前Field的value\n        } else {\n            throw new Exception(o.getClass().getSimpleName() + \"类不存在字段名 \"\n                    + fieldName);\n        }\n        return value;\n    }\n\n    /**\n     * 根据带路径或不带路径的属性名获取属性值,即接受简单属性名，\n     * 如userName等，又接受带路径的属性名，如student.department.name等\n     *\n     * @param fieldNameSequence 带路径的属性名或简单属性名\n     * @param o                 对象\n     * @return 属性值\n     * @throws Exception 异常\n     */\n    public static Object getFieldValueByNameSequence(String fieldNameSequence,\n                                                     Object o) throws Exception {\n        // logger.info(\"根据带路径或不带路径的属性名获取属性值,即接受简单属性名:getFieldValueByNameSequence()\");\n        Object value = null;\n        // 将fieldNameSequence进行拆分\n        String[] attributes = fieldNameSequence.split(\"\\\\.\");\n        if (attributes.length == 1) {\n            value = getFieldValueByName(fieldNameSequence, o);\n        } else {\n            // 根据数组中第一个连接属性名获取连接属性对象，如student.department.name\n            Object fieldObj = getFieldValueByName(attributes[0], o);\n            //截取除第一个属性名之后的路径\n            String subFieldNameSequence = fieldNameSequence\n                    .substring(fieldNameSequence.indexOf(\".\") + 1);\n            //递归得到最终的属性对象的值\n            value = getFieldValueByNameSequence(subFieldNameSequence, fieldObj);\n        }\n        return value;\n    }\n\n    /**\n     * 向工作表中填充数据\n     *\n     * @param sheet    excel的工作表名称\n     * @param list     数据源\n     * @param fieldMap 中英文字段对应关系的Map\n     * @param style    表格中的格式\n     * @throws Exception 异常\n     */\n    public static <T> void fillSheet(HSSFSheet sheet, List<T> list,\n                                     LinkedHashMap<String, String> fieldMap, HSSFCellStyle style) throws Exception {\n        //logger.info(\"向工作表中填充数据:fillSheet()\");\n        // 定义存放英文字段名和中文字段名的数组\n        String[] enFields = new String[fieldMap.size()];\n        String[] cnFields = new String[fieldMap.size()];\n        // 填充数组\n        int count = 0;\n        for (Map.Entry<String, String> entry : fieldMap.entrySet()) {\n            enFields[count] = entry.getKey();\n            cnFields[count] = entry.getValue();\n            count++;\n        }\n        //存储最大列宽\n        Map<Integer, Integer> maxWidth = new HashMap<>();\n        HSSFRow row = sheet.createRow((int) 0);\n        HSSFCell cell = null;\n        // 填充表头\n        for (int i = 0; i < cnFields.length; i++) {\n            cell = row.createCell(i);\n            cell.setCellValue(cnFields[i]);\n            cell.setCellStyle(style);\n            sheet.autoSizeColumn(i);\n            //设置自适应宽高\n            maxWidth.put(i, cell.getStringCellValue().getBytes().length * 256 + 200);\n        }\n        // 填充内容\n        for (int index = 0; index < list.size(); index++) {\n            row = sheet.createRow(index + 1);\n            // 获取单个对象\n            T item = list.get(index);\n            int j = 0;\n            for (int i = 0; i < enFields.length; i++) {\n                HSSFCell createCell = row.createCell(j);\n                Object objValue = getFieldValueByNameSequence(enFields[i], item);\n                String fieldValue = objValue == null ? \"\" : objValue.toString();\n                cell = row.createCell(i);\n                createCell.setCellValue(fieldValue);\n\n                int length = createCell.getStringCellValue().getBytes().length * 256 + 200;\n                //这里把宽度最大限制到15000\n                if (length > 15000) {\n                    length = 15000;\n                }\n                maxWidth.put(j, Math.max(length, maxWidth.get(j)));\n                j++;\n                createCell.setCellStyle(style);\n            }\n        }\n\n        // 列宽自适应\n        for (int i = 0; i < cnFields.length; i++) {\n            sheet.setColumnWidth(i, maxWidth.get(i));\n        }\n    }\n\n    public static List<T> getRecordByTxt(String path) {\n        List<T> result = new ArrayList<>();\n        try {\n            List<String> contentList = Files.readAllLines(Paths.get(path),\n                    StandardCharsets.UTF_8);\n            contentList.forEach(e -> {\n                if (!StringUtils.isEmpty(e)) {\n                    // 处理 string 根据导入的文件自己处理得到实体类\n                    // result.add(e);\n                }\n            });\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n\n        return result;\n    }\n\n\n\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/ImageUtil.java",
    "content": "package com.zhang.ssmschoolshop.util;\r\n\r\nimport org.springframework.web.multipart.MultipartFile;\r\n\r\nimport java.io.File;\r\nimport java.io.IOException;\r\nimport java.util.UUID;\r\n\r\n/**\r\n * @author created by Zhangdazhuang\r\n * @version v.0.1\r\n * @Description 根据操作系统的不同保存到不同路径\r\n * @date 2019/4/30\r\n * @备注\r\n **/\r\npublic class ImageUtil {\r\n\r\n    public static String imagePath(MultipartFile file, String shopName) {\r\n        if (file.isEmpty()) {\r\n            return \"false\";\r\n        }\r\n        int size = (int) file.getSize();\r\n        String path = \"D:/upload\";\r\n        String os = System.getProperty(\"os.name\");\r\n        if(!os.toLowerCase().startsWith(\"windows\")){\r\n            // todo mac需要修改地址\r\n            path=\"/usr/upload\";\r\n        }\r\n        String fileName=UUID.randomUUID().toString().substring(0,4)+shopName;\r\n        File dest = new File(path + \"/\" +fileName);\r\n        System.out.println(\"保存的绝对路径为:\"+dest);\r\n        if (!dest.getParentFile().exists()) { //判断文件父目录是否存在\r\n            dest.getParentFile().mkdir();\r\n        }\r\n        try {\r\n            //根据系统的不同，保存到不同的路径\r\n            file.transferTo(dest);\r\n            return fileName;\r\n        } catch (IllegalStateException e) {\r\n            // TODO Auto-generated catch block\r\n            e.printStackTrace();\r\n            return \"false\";\r\n        } catch (IOException e) {\r\n            // TODO Auto-generated catch block\r\n            e.printStackTrace();\r\n            return \"false\";\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/Md5Util.java",
    "content": "package com.zhang.ssmschoolshop.util;\r\n\r\nimport java.security.MessageDigest;\r\n\r\n/**\r\n * @author created by Zhangdazhuang\r\n * @version v.0.1\r\n * @Description TODO\r\n * @date 2019/4/26\r\n * @备注\r\n **/\r\npublic class Md5Util {\r\n\r\n    private static final String hexDigIts[] = {\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"};\r\n\r\n    /**\r\n     * MD5加密\r\n     * @param origin 字符\r\n     * @param charsetname 编码\r\n     * @return\r\n     */\r\n    public static String MD5Encode(String origin, String charsetname){\r\n        String resultString = null;\r\n        try{\r\n            resultString = new String(origin);\r\n            MessageDigest md = MessageDigest.getInstance(\"MD5\");\r\n            resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));\r\n        }catch (Exception e){\r\n        }\r\n        return resultString;\r\n    }\r\n\r\n\r\n    public static String byteArrayToHexString(byte b[]){\r\n        StringBuffer resultSb = new StringBuffer();\r\n        for(int i = 0; i < b.length; i++){\r\n            resultSb.append(byteToHexString(b[i]));\r\n        }\r\n        return resultSb.toString();\r\n    }\r\n\r\n    public static String byteToHexString(byte b){\r\n        int n = b;\r\n        if(n < 0){\r\n            n += 256;\r\n        }\r\n        int d1 = n / 16;\r\n        int d2 = n % 16;\r\n        return hexDigIts[d1] + hexDigIts[d2];\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/Msg.java",
    "content": "package com.zhang.ssmschoolshop.util;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class Msg {\n    //100-success,200-fail\n    private int code;\n\n    //提示信息\n    private String msg;\n\n    //数据\n    private Map<String, Object> info = new HashMap<String, Object>();\n\n    public static Msg success(String msg) {\n        Msg result = new Msg();\n        result.setCode(100);\n        result.setMsg(msg);\n        return result;\n    }\n\n    public static Msg fail(String msg) {\n        Msg result = new Msg();\n        result.setCode(200);\n        result.setMsg(msg);\n        return result;\n    }\n\n    public Msg add(String key, Object value) {\n        this.getInfo().put(key, value);\n        return this;\n    }\n\n    public int getCode() {\n        return code;\n    }\n\n    public void setCode(int code) {\n        this.code = code;\n    }\n\n    public String getMsg() {\n        return msg;\n    }\n\n    public void setMsg(String msg) {\n        this.msg = msg;\n    }\n\n    public Map<String, Object> getInfo() {\n        return info;\n    }\n\n    public void setInfo(Map<String, Object> info) {\n        this.info = info;\n    }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/java/com/zhang/ssmschoolshop/util/verificate/Verificate.java",
    "content": "package com.zhang.ssmschoolshop.util.verificate;\n\nimport javax.imageio.ImageIO;\nimport java.awt.*;\nimport java.awt.image.BufferedImage;\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.util.Random;\n\n\npublic class Verificate {\n\n        // 验证码图片中可以出现的字符集，可根据需要修改\n        private char mapTable[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',\n                'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };\n\n        /**\n         * 功能:生成彩色验证码图片 参数width为生成图片的宽度,参数height为生成图片的高度,参数为页面的输出流\n         */\n        public String getCertPic(int width, int height,OutputStream os) {\n            if (width <= 0)\n                width = 60;\n            if (height <= 0)\n                height = 20;\n            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);\n            // 获取图形上下文\n            Graphics g = image.getGraphics();\n            // 设定背景色\n            g.setColor(new Color(0x9FDCB1));\n            g.fillRect(0, 0, width, height);\n            // 画边框\n            g.setColor(new Color(0x9FDCB1));\n            g.drawRect(0, 0, width - 1, height - 1);\n            // 取随机产生的认证码\n            String strEnsure = \"\";\n            // 4代表4位验证码,如果要生成更多位的认证码,则加大数值\n            for (int i = 0; i < 4; ++i) {\n                strEnsure += mapTable[(int) (mapTable.length * Math.random())];\n            }\n            // 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句\n            g.setColor(new Color(0x172D44));\n            g.setFont(new Font(\"Atlantic Inline\", Font.PLAIN, 18));\n            String str = strEnsure.substring(0, 1);\n            g.drawString(str, 8, 17);\n            str = strEnsure.substring(1, 2);\n            g.drawString(str, 20, 15);\n            str = strEnsure.substring(2, 3);\n            g.drawString(str, 35, 18);\n            str = strEnsure.substring(3, 4);\n            g.drawString(str, 45, 15);\n            // 随机产生10个干扰点\n            Random rand = new Random();\n            for (int i = 0; i < 10; i++) {\n                int x = rand.nextInt(width);\n                int y = rand.nextInt(height);\n                g.drawOval(x, y, 1, 1);\n            }\n            // 释放图形上下文\n            g.dispose();\n            try {\n                // 输出图像到页面\n                ImageIO.write(image, \"JPEG\", os);\n            } catch (IOException e) {\n                return \"\";\n            }\n            return strEnsure;\n        }\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/application.yml",
    "content": "server:\r\n  port: 8081\r\n  servlet:\r\n    context-path: /shop\r\n    multipart:\r\n      max-file-size: 10MB  #单个文件\r\n      max-request-size: 100MB #总文件大小\r\n\r\nspring:\r\n     datasource:\r\n        driver-class-name: com.mysql.cj.jdbc.Driver\r\n        url: jdbc:mysql://127.0.0.1:3306/db_shopmaster?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8\r\n        username: root\r\n        password: 123456\r\n     jpa:\r\n       show-sql: true\r\n     mvc:\r\n       view:\r\n         prefix: /WEB-INF/views/\r\n         suffix: .jsp\r\n\r\n\r\nmybatis:\r\n  mapper-locations: classpath:mapper/*.xml\r\n  type-aliases-package: com.zhang.ssmschoolshop.entity\r\n   #devtools插件\r\ndevtools:\r\n    restart:\r\n      enabled: true #是否支持热部署\r\n#mybaatis分页插件pagehelper设置\r\npagehelper:\r\n  pagehelperDialect: mysql\r\n  reasonable: true\r\n  support-methods-arguments: true\r\n\r\n  # 打印sql\r\nlogging:\r\n    level:\r\n       com.zhang.ssmschoolshop.dao: DEBUG\r\n\r\n\r\nmail:\r\n  host: smtp.qq.com\r\n  username: 1452212104@qq.com\r\n  password: ngwtfshywjpajihi1  ### 你的邮件smtp授权码\r\n  default-encoding: UTF-8\r\n  protocol: smtp\r\n  properties:\r\n    mail:\r\n      smtp:\r\n        ssl:\r\n          enable: true\r\n  #spring.mail.port: 25\r\n  from: 1452212105@qq.com\r\n  receive:  1452212101@qq.com #收件者邮箱\r\n  receive2: 1452212102@qq.com\r\n  test-connection: false\r\n\r\n\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/banner.txt",
    "content": "                           _ooOoo_\n                          o8888888o\n                          88\" . \"88\n                          (| -_- |)\n                          O\\  =  /O\n                       ____/`---'\\____\n                     .'  \\\\|     |//  `.\n                    /  \\\\|||  :  |||//  \\\n                   /  _||||| -:- |||||-  \\\n                   |   | \\\\\\  -  /// |   |\n                   | \\_|  ''\\---/''  |   |\n                   \\  .-\\__  `-`  ___/-. /\n                 ___`. .'  /--.--\\  `. . __\n              .\"\" '<  `.___\\_<|>_/___.'  >'\"\".\n             | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |\n             \\  \\ `-.   \\_ __\\ /__ _/   .-` /  /\n        ======`-.____`-.___\\_____/___.-`____.-'======\n                           `=---='\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n                 佛祖保佑       永无BUG\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/ActivityMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ActivityMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Activity\">\n    <id column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n    <result column=\"activityName\" jdbcType=\"VARCHAR\" property=\"activityname\" />\n    <result column=\"activityDes\" jdbcType=\"VARCHAR\" property=\"activitydes\" />\n    <result column=\"discount\" jdbcType=\"REAL\" property=\"discount\" />\n    <result column=\"fullPrice\" jdbcType=\"INTEGER\" property=\"fullprice\" />\n    <result column=\"reducePrice\" jdbcType=\"INTEGER\" property=\"reduceprice\" />\n    <result column=\"fullNum\" jdbcType=\"INTEGER\" property=\"fullnum\" />\n    <result column=\"reduceNum\" jdbcType=\"INTEGER\" property=\"reducenum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    activityId, activityName, activityDes, discount, fullPrice, reducePrice, fullNum, \n    reduceNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\">\n    delete from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity (activityId, activityName, activityDes, \n      discount, fullPrice, reducePrice, \n      fullNum, reduceNum)\n    values (#{activityid,jdbcType=INTEGER}, #{activityname,jdbcType=VARCHAR}, #{activitydes,jdbcType=VARCHAR}, \n      #{discount,jdbcType=REAL}, #{fullprice,jdbcType=INTEGER}, #{reduceprice,jdbcType=INTEGER}, \n      #{fullnum,jdbcType=INTEGER}, #{reducenum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"activityname != null\">\n        activityName,\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes,\n      </if>\n      <if test=\"discount != null\">\n        discount,\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice,\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice,\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum,\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"activityname != null\">\n        #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        #{reducenum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultType=\"java.lang.Long\">\n    select count(*) from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update activity\n    <set>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.activityname != null\">\n        activityName = #{record.activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activitydes != null\">\n        activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.discount != null\">\n        discount = #{record.discount,jdbcType=REAL},\n      </if>\n      <if test=\"record.fullprice != null\">\n        fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reduceprice != null\">\n        reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.fullnum != null\">\n        fullNum = #{record.fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reducenum != null\">\n        reduceNum = #{record.reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update activity\n    set activityId = #{record.activityid,jdbcType=INTEGER},\n      activityName = #{record.activityname,jdbcType=VARCHAR},\n      activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      discount = #{record.discount,jdbcType=REAL},\n      fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      fullNum = #{record.fullnum,jdbcType=INTEGER},\n      reduceNum = #{record.reducenum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    <set>\n      <if test=\"activityname != null\">\n        activityName = #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes = #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        discount = #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice = #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice = #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum = #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum = #{reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    set activityName = #{activityname,jdbcType=VARCHAR},\n      activityDes = #{activitydes,jdbcType=VARCHAR},\n      discount = #{discount,jdbcType=REAL},\n      fullPrice = #{fullprice,jdbcType=INTEGER},\n      reducePrice = #{reduceprice,jdbcType=INTEGER},\n      fullNum = #{fullnum,jdbcType=INTEGER},\n      reduceNum = #{reducenum,jdbcType=INTEGER}\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/AddressMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AddressMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Address\">\n    <id column=\"addressID\" jdbcType=\"INTEGER\" property=\"addressid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"province\" jdbcType=\"VARCHAR\" property=\"province\" />\n    <result column=\"city\" jdbcType=\"VARCHAR\" property=\"city\" />\n    <result column=\"county\" jdbcType=\"VARCHAR\" property=\"county\" />\n    <result column=\"detailAddr\" jdbcType=\"VARCHAR\" property=\"detailaddr\" />\n    <result column=\"conName\" jdbcType=\"VARCHAR\" property=\"conname\" />\n    <result column=\"conTel\" jdbcType=\"VARCHAR\" property=\"contel\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    addressID, userId, province, city, county, detailAddr, conName, conTel\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\">\n    delete from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address (addressID, userId, province, \n      city, county, detailAddr, \n      conName, conTel)\n    values (#{addressid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, \n      #{city,jdbcType=VARCHAR}, #{county,jdbcType=VARCHAR}, #{detailaddr,jdbcType=VARCHAR}, \n      #{conname,jdbcType=VARCHAR}, #{contel,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        addressID,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"province != null\">\n        province,\n      </if>\n      <if test=\"city != null\">\n        city,\n      </if>\n      <if test=\"county != null\">\n        county,\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr,\n      </if>\n      <if test=\"conname != null\">\n        conName,\n      </if>\n      <if test=\"contel != null\">\n        conTel,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        #{contel,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultType=\"java.lang.Long\">\n    select count(*) from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update address\n    <set>\n      <if test=\"record.addressid != null\">\n        addressID = #{record.addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.province != null\">\n        province = #{record.province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.city != null\">\n        city = #{record.city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.county != null\">\n        county = #{record.county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.detailaddr != null\">\n        detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.conname != null\">\n        conName = #{record.conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.contel != null\">\n        conTel = #{record.contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update address\n    set addressID = #{record.addressid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      province = #{record.province,jdbcType=VARCHAR},\n      city = #{record.city,jdbcType=VARCHAR},\n      county = #{record.county,jdbcType=VARCHAR},\n      detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      conName = #{record.conname,jdbcType=VARCHAR},\n      conTel = #{record.contel,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        province = #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        city = #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        county = #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        conName = #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        conTel = #{contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    set userId = #{userid,jdbcType=INTEGER},\n      province = #{province,jdbcType=VARCHAR},\n      city = #{city,jdbcType=VARCHAR},\n      county = #{county,jdbcType=VARCHAR},\n      detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      conName = #{conname,jdbcType=VARCHAR},\n      conTel = #{contel,jdbcType=VARCHAR}\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/AdminMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AdminMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Admin\">\n    <id column=\"adminId\" jdbcType=\"INTEGER\" property=\"adminid\" />\n    <result column=\"adminName\" jdbcType=\"VARCHAR\" property=\"adminname\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    adminId, adminName, password\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </select>\n  <select id=\"selectByName\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\" resultMap=\"BaseResultMap\">\n    select\n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminName = #{adminname}\n    <if test=\"password != null\">\n      and password = #{password}\n    </if>\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\">\n    delete from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin (adminId, adminName, password\n      )\n    values (#{adminid,jdbcType=INTEGER}, #{adminname,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        adminId,\n      </if>\n      <if test=\"adminname != null\">\n        adminName,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        #{adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"adminname != null\">\n        #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultType=\"java.lang.Long\">\n    select count(*) from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update admin\n    <set>\n      <if test=\"record.adminid != null\">\n        adminId = #{record.adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.adminname != null\">\n        adminName = #{record.adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update admin\n    set adminId = #{record.adminid,jdbcType=INTEGER},\n      adminName = #{record.adminname,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    <set>\n      <if test=\"adminname != null\">\n        adminName = #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    set adminName = #{adminname,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR}\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/CategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CategoryMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Category\">\n    <id column=\"cateId\" jdbcType=\"INTEGER\" property=\"cateid\" />\n    <result column=\"cateName\" jdbcType=\"VARCHAR\" property=\"catename\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    cateId, cateName\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 8\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\">\n    delete from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category (cateId, cateName)\n    values (#{cateid,jdbcType=INTEGER}, #{catename,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        cateId,\n      </if>\n      <if test=\"catename != null\">\n        cateName,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        #{cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catename != null\">\n        #{catename,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultType=\"java.lang.Long\">\n    select count(*) from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update category\n    <set>\n      <if test=\"record.cateid != null\">\n        cateId = #{record.cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catename != null\">\n        cateName = #{record.catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update category\n    set cateId = #{record.cateid,jdbcType=INTEGER},\n      cateName = #{record.catename,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    <set>\n      <if test=\"catename != null\">\n        cateName = #{catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    set cateName = #{catename,jdbcType=VARCHAR}\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/CommentMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CommentMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Comment\">\n    <id column=\"commentId\" jdbcType=\"INTEGER\" property=\"commentid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"point\" jdbcType=\"INTEGER\" property=\"point\" />\n    <result column=\"content\" jdbcType=\"VARCHAR\" property=\"content\" />\n    <result column=\"commentTime\" jdbcType=\"TIMESTAMP\" property=\"commenttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    commentId, userId, goodsId, point, content, commentTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\">\n    delete from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment (commentId, userId, goodsId, \n      point, content, commentTime\n      )\n    values (#{commentid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{point,jdbcType=INTEGER}, #{content,jdbcType=VARCHAR}, #{commenttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        commentId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"point != null\">\n        point,\n      </if>\n      <if test=\"content != null\">\n        content,\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        #{commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultType=\"java.lang.Long\">\n    select count(*) from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update comment\n    <set>\n      <if test=\"record.commentid != null\">\n        commentId = #{record.commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.point != null\">\n        point = #{record.point,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.content != null\">\n        content = #{record.content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.commenttime != null\">\n        commentTime = #{record.commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update comment\n    set commentId = #{record.commentid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      point = #{record.point,jdbcType=INTEGER},\n      content = #{record.content,jdbcType=VARCHAR},\n      commentTime = #{record.commenttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        point = #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        content = #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime = #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    set userId = #{userid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      point = #{point,jdbcType=INTEGER},\n      content = #{content,jdbcType=VARCHAR},\n      commentTime = #{commenttime,jdbcType=TIMESTAMP}\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/FavoriteMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.FavoriteMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"collectTime\" jdbcType=\"TIMESTAMP\" property=\"collecttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsId, collectTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\">\n    delete from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\">\n    delete from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection (userId, goodsId, collectTime\n      )\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{collecttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"collecttime != null\">\n        collectTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"collecttime != null\">\n        #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultType=\"java.lang.Long\">\n    select count(*) from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update collection\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.collecttime != null\">\n        collectTime = #{record.collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update collection\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      collectTime = #{record.collecttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    <set>\n      <if test=\"collecttime != null\">\n        collectTime = #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    set collectTime = #{collecttime,jdbcType=TIMESTAMP}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/GoodsMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.GoodsMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"goodsName\" jdbcType=\"VARCHAR\" property=\"goodsname\" />\n    <result column=\"price\" jdbcType=\"INTEGER\" property=\"price\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n    <result column=\"upTime\" jdbcType=\"TIMESTAMP\" property=\"uptime\" />\n    <result column=\"category\" jdbcType=\"INTEGER\" property=\"category\" />\n    <result column=\"detailCate\" jdbcType=\"VARCHAR\" property=\"detailcate\" />\n    <result column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n  </resultMap>\n  <resultMap extends=\"BaseResultMap\" id=\"ResultMapWithBLOBs\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <result column=\"description\" jdbcType=\"LONGVARCHAR\" property=\"description\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    goodsId, goodsName, price, num, upTime, category, detailCate, activityId\n  </sql>\n  <sql id=\"Blob_Column_List\">\n    description\n  </sql>\n\n  <select id=\"selectByExampleWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n\n  <select id=\"selectByExampleWithBLOBsLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 10\n  </select>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"ResultMapWithBLOBs\">\n    select \n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\">\n    delete from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    insert into goods (goodsId, goodsName, price, \n      num, upTime, category, \n      detailCate, activityId, description\n      )\n    values (#{goodsid,jdbcType=INTEGER}, #{goodsname,jdbcType=VARCHAR}, #{price,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER}, #{uptime,jdbcType=TIMESTAMP}, #{category,jdbcType=INTEGER}, \n      #{detailcate,jdbcType=VARCHAR}, #{activityid,jdbcType=INTEGER}, #{description,jdbcType=LONGVARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\" useGeneratedKeys=\"true\" keyProperty=\"goodsid\">\n    insert into goods\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"goodsname != null\">\n        goodsName,\n      </if>\n      <if test=\"price != null\">\n        price,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n      <if test=\"uptime != null\">\n        upTime,\n      </if>\n      <if test=\"category != null\">\n        category,\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate,\n      </if>\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"description != null\">\n        description,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsname != null\">\n        #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultType=\"java.lang.Long\">\n    select count(*) from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update goods\n    <set>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsname != null\">\n        goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.price != null\">\n        price = #{record.price,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.uptime != null\">\n        upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.category != null\">\n        category = #{record.category,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.detailcate != null\">\n        detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.description != null\">\n        description = #{record.description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExampleWithBLOBs\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER},\n      description = #{record.description,jdbcType=LONGVARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    <set>\n      <if test=\"goodsname != null\">\n        goodsName = #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        price = #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        upTime = #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        category = #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate = #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        activityId = #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        description = #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKeyWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER},\n      description = #{description,jdbcType=LONGVARCHAR}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/ImagePathMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ImagePathMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    <id column=\"pathId\" jdbcType=\"INTEGER\" property=\"pathid\" />\n    <result column=\"goodId\" jdbcType=\"INTEGER\" property=\"goodid\" />\n    <result column=\"path\" jdbcType=\"VARCHAR\" property=\"path\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    pathId, goodId, path\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\">\n    delete from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath (pathId, goodId, path\n      )\n    values (#{pathid,jdbcType=INTEGER}, #{goodid,jdbcType=INTEGER}, #{path,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        pathId,\n      </if>\n      <if test=\"goodid != null\">\n        goodId,\n      </if>\n      <if test=\"path != null\">\n        path,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        #{pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodid != null\">\n        #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        #{path,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultType=\"java.lang.Long\">\n    select count(*) from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update imagepath\n    <set>\n      <if test=\"record.pathid != null\">\n        pathId = #{record.pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodid != null\">\n        goodId = #{record.goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.path != null\">\n        path = #{record.path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update imagepath\n    set pathId = #{record.pathid,jdbcType=INTEGER},\n      goodId = #{record.goodid,jdbcType=INTEGER},\n      path = #{record.path,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    <set>\n      <if test=\"goodid != null\">\n        goodId = #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        path = #{path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    set goodId = #{goodid,jdbcType=INTEGER},\n      path = #{path,jdbcType=VARCHAR}\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/OrderItemMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderItemMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    <id column=\"itemId\" jdbcType=\"INTEGER\" property=\"itemid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    itemId, orderId, goodsId, num\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\">\n    delete from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem (itemId, orderId, goodsId, \n      num)\n    values (#{itemid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        itemId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        #{itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultType=\"java.lang.Long\">\n    select count(*) from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update orderitem\n    <set>\n      <if test=\"record.itemid != null\">\n        itemId = #{record.itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update orderitem\n    set itemId = #{record.itemid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n    </set>\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    set orderId = #{orderid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER}\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/OrderMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Order\">\n    <id column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"orderTime\" jdbcType=\"TIMESTAMP\" property=\"ordertime\" />\n    <result column=\"oldPrice\" jdbcType=\"REAL\" property=\"oldprice\" />\n    <result column=\"newPrice\" jdbcType=\"REAL\" property=\"newprice\" />\n    <result column=\"isPay\" jdbcType=\"BIT\" property=\"ispay\" />\n    <result column=\"isSend\" jdbcType=\"BIT\" property=\"issend\" />\n    <result column=\"isReceive\" jdbcType=\"BIT\" property=\"isreceive\" />\n    <result column=\"isComplete\" jdbcType=\"BIT\" property=\"iscomplete\" />\n    <result column=\"addressId\" jdbcType=\"INTEGER\" property=\"addressid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    orderId, userId, orderTime, oldPrice, newPrice, isPay, isSend, isReceive, isComplete, \n    addressId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\">\n    delete from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    insert into indent (orderId, userId, orderTime, \n      oldPrice, newPrice, isPay, isSend, \n      isReceive, isComplete, addressId\n      )\n    values (#{orderid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{ordertime,jdbcType=TIMESTAMP}, \n      #{oldprice,jdbcType=REAL}, #{newprice,jdbcType=REAL}, #{ispay,jdbcType=BIT}, #{issend,jdbcType=BIT}, \n      #{isreceive,jdbcType=BIT}, #{iscomplete,jdbcType=BIT}, #{addressid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\" useGeneratedKeys=\"true\" keyProperty=\"orderid\">\n    insert into indent\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime,\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice,\n      </if>\n      <if test=\"newprice != null\">\n        newPrice,\n      </if>\n      <if test=\"ispay != null\">\n        isPay,\n      </if>\n      <if test=\"issend != null\">\n        isSend,\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive,\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete,\n      </if>\n      <if test=\"addressid != null\">\n        addressId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultType=\"java.lang.Long\">\n    select count(*) from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update indent\n    <set>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.ordertime != null\">\n        orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.oldprice != null\">\n        oldPrice = #{record.oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.newprice != null\">\n        newPrice = #{record.newprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.ispay != null\">\n        isPay = #{record.ispay,jdbcType=BIT},\n      </if>\n      <if test=\"record.issend != null\">\n        isSend = #{record.issend,jdbcType=BIT},\n      </if>\n      <if test=\"record.isreceive != null\">\n        isReceive = #{record.isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"record.iscomplete != null\">\n        isComplete = #{record.iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"record.addressid != null\">\n        addressId = #{record.addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update indent\n    set orderId = #{record.orderid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{record.oldprice,jdbcType=REAL},\n      newPrice = #{record.newprice,jdbcType=REAL},\n      isPay = #{record.ispay,jdbcType=BIT},\n      isSend = #{record.issend,jdbcType=BIT},\n      isReceive = #{record.isreceive,jdbcType=BIT},\n      isComplete = #{record.iscomplete,jdbcType=BIT},\n      addressId = #{record.addressid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice = #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        newPrice = #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        isPay = #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        isSend = #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive = #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete = #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        addressId = #{addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    set userId = #{userid,jdbcType=INTEGER},\n      orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{oldprice,jdbcType=REAL},\n      newPrice = #{newprice,jdbcType=REAL},\n      isPay = #{ispay,jdbcType=BIT},\n      isSend = #{issend,jdbcType=BIT},\n      isReceive = #{isreceive,jdbcType=BIT},\n      isComplete = #{iscomplete,jdbcType=BIT},\n      addressId = #{addressid,jdbcType=INTEGER}\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/ShopCartMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ShopCartMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsid\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"cateDate\" jdbcType=\"TIMESTAMP\" property=\"catedate\" />\n    <result column=\"goodsNum\" jdbcType=\"INTEGER\" property=\"goodsnum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsid, cateDate, goodsNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\">\n    delete from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\">\n    delete from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart (userId, goodsid, cateDate, \n      goodsNum)\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{catedate,jdbcType=TIMESTAMP}, \n      #{goodsnum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsid,\n      </if>\n      <if test=\"catedate != null\">\n        cateDate,\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catedate != null\">\n        #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultType=\"java.lang.Long\">\n    select count(*) from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update shopcart\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsid = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catedate != null\">\n        cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.goodsnum != null\">\n        goodsNum = #{record.goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update shopcart\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsid = #{record.goodsid,jdbcType=INTEGER},\n      cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{record.goodsnum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    <set>\n      <if test=\"catedate != null\">\n        cateDate = #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum = #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    set cateDate = #{catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{goodsnum,jdbcType=INTEGER}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/resources/mapper/UserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.UserMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.User\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"username\" jdbcType=\"VARCHAR\" property=\"username\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n    <result column=\"regTime\" jdbcType=\"TIMESTAMP\" property=\"regtime\" />\n    <result column=\"email\" jdbcType=\"VARCHAR\" property=\"email\" />\n    <result column=\"telephone\" jdbcType=\"VARCHAR\" property=\"telephone\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, username, password, regTime, email, telephone\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\">\n    delete from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user (userId, username, password, \n      regTime, email, telephone\n      )\n    values (#{userid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, \n      #{regtime,jdbcType=TIMESTAMP}, #{email,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"username != null\">\n        username,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n      <if test=\"regtime != null\">\n        regTime,\n      </if>\n      <if test=\"email != null\">\n        email,\n      </if>\n      <if test=\"telephone != null\">\n        telephone,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"username != null\">\n        #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        #{telephone,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultType=\"java.lang.Long\">\n    select count(*) from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update user\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.username != null\">\n        username = #{record.username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.regtime != null\">\n        regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.email != null\">\n        email = #{record.email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.telephone != null\">\n        telephone = #{record.telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update user\n    set userId = #{record.userid,jdbcType=INTEGER},\n      username = #{record.username,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR},\n      regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      email = #{record.email,jdbcType=VARCHAR},\n      telephone = #{record.telephone,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    <set>\n      <if test=\"username != null\">\n        username = #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        regTime = #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        email = #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        telephone = #{telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    set username = #{username,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR},\n      regTime = #{regtime,jdbcType=TIMESTAMP},\n      email = #{email,jdbcType=VARCHAR},\n      telephone = #{telephone,jdbcType=VARCHAR}\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/activity.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <%--<script src=\"${pageContext.request.contextPath}/js/jquery.form.min.js\"></script>--%>\n\n</head>\n<body>\n\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\" class=\"active\">所有活动</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/add\">添加活动</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>--%>\n                        <%--<li><a href=\"login.html\">。。。</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动描述<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">折扣<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">满减<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">满免<span class=\"caret\"></span></a></td>\n                            <td>删除</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"activity\" varStatus=\"num\">\n                            <tr>\n                                <td>${activity.activityid}</td>\n                                <td>${activity.activityname}</td>\n                                <td>${activity.activitydes}</td>\n                                <td>${activity.discount}</td>\n                                <c:if test=\"${!empty activity.fullprice}\">\n                                    <td>满${activity.fullprice}减${activity.reduceprice}</td>\n                                </c:if>\n                                <c:if test=\"${empty activity.fullprice}\">\n                                    <td>无满减</td>\n                                </c:if>\n\n                                <c:if test=\"${!empty activity.fullnum}\">\n                                    <td>满${activity.fullnum}免${activity.reducenum}</td>\n                                </c:if>\n                                <c:if test=\"${empty activity.fullnum}\">\n                                    <td>无满免</td>\n                                </c:if>\n                                <td><a href=\"${pageContext.request.contextPath}/admin/activity/delete?activityid=${activity.activityid}\" class=\"templatemo-delete-btn\" style=\"padding: 0;\">删除</a></td>\n                            </tr>\n                        </c:forEach>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n<!-- Templatemo Script -->\n<script>\n    $(document).ready(function () {\n        // Content widget with background image\n        var imageUrl = $('img.content-bg-img').attr('src');\n        $('.templatemo-content-img-bg').css('background-image', 'url(' + imageUrl + ')');\n        $('img.content-bg-img').hide();\n\n        /*$(\"a\").click(function () {\n            $(this).addClass(\"active\");\n        });*/\n    });\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/addActivity.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\">所有活动</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/add\" class=\"active\">添加活动</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>--%>\n                        <%--<li><a href=\"login.html\">。。。</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <h2 class=\"margin-bottom-10\">增加活动</h2>\n                <p>活动的一些基本信息</p>\n                <form action=\"${pageContext.request.contextPath}/admin/activity/addResult\" class=\"templatemo-login-form\" method=\"post\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess\">活动名称</label>\n                            <input type=\"text\" class=\"form-control show-inpu\" id=\"inputWithSuccess\" name=\"activityname\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithDiscount\">折扣</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithDiscount\" name=\"discount\" step=\"0.01\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithFullprice\">满</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithFullprice\" name=\"fullprice\" placeholder=\"￥满减\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithReduceprice\">减</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithReduceprice\" name=\"reduceprice\" placeholder=\"￥满减\">\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithFullnum\">满</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithFullnum\" name=\"fullnum\" placeholder=\"满免\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithReducenum\">免</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithReducenum\" name=\"reducenum\" placeholder=\"满免\">\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputNote\">活动描述</label>\n                            <textarea class=\"form-control\" id=\"inputNote\" rows=\"3\" name=\"activitydes\"></textarea>\n                        </div>\n                    </div>\n\n\n                    <div class=\"form-group text-right\">\n                        <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        <button type=\"reset\" class=\"templatemo-white-button\">重置</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>        <!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/bootstrap-filestyle.min.js\"></script>  <!-- http://markusslima.github.io/bootstrap-filestyle/ -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}', '成功', 'success');\n        });\n    </script>\n</c:if>\n</body>\n</html>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/addCategory.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n   <%-- <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>--%>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/categery.js\"></script>\n\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-cate\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改分类名称</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"categoryName\" class=\"col-sm-2 control-label\">分类名</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"categoryName\" name=\"categoryName\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveCatename\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"></jsp:include>\n        <div class=\"templatemo-content-container\">\n\n            <div class=\"templatemo-content-widget white-bg\">\n                <div class=\"templatemo-content-widget no-padding\">\n                    <div class=\"panel panel-default table-responsive\">\n                        <table id=\"goodsinfo\" class=\"table  table-bordered templatemo-user-table\">\n                            <thead>\n                            <tr>\n                                <td>分类名</td>\n                                <td >编辑</td>\n                                <td >删除</td>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            <c:forEach items=\"${categoryList}\" var=\"category\">\n                                <tr>\n                                    <td><a href=\"\" class=\"templatemo-link\" cateId=\"${category.cateid}\">${category.catename}</a></td>\n                                    <td><button href=\"\" class=\"templatemo-edit-btn\" name=\"changCate\">编辑</button></td>\n                                    <td><button href=\"\" class=\"templatemo-delete-btn\" name=\"deleteCate\">删除</button></td>\n                                </tr>\n                            </c:forEach>\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n                <label class=\"control-label\" for=\"catename\">添加分类</label>\n                <form action=\"${pageContext.request.contextPath}/admin/goods/addCategoryResult\" method=\"post\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <input type=\"text\" class=\"form-control\" id=\"catename\" name=\"catename\">\n                        </div>\n                        <div class=\"col-lg-4 form-group\">\n                            <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}');\n        });\n    </script>\n</c:if>\n</body>\n</html>\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/addGoods.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    \n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"></jsp:include>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <h2 class=\"margin-bottom-10\">添加商品</h2>\n                <p>商品的一些基本信息</p>\n                <form action=\"${pageContext.request.contextPath}/admin/goods/addGoodsSuccess\" class=\"templatemo-login-form\" method=\"post\" enctype=\"multipart/form-data\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess\">商品名称</label>\n                            <input type=\"text\" class=\"form-control\" id=\"inputWithSuccess\" name=\"goodsname\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithWarning\">价格</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithWarning\" name=\"price\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithError\">数量</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithError\" name=\"num\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputNote\">商品描述</label>\n                            <textarea class=\"form-control\" id=\"inputNote\" rows=\"3\" name=\"description\"></textarea>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 col-md-6 form-group\">\n                            <label class=\"control-label templatemo-block\">类别</label>\n                            <select class=\"form-control\" name=\"category\">\n                                <c:forEach items=\"${categoryList}\" var=\"item\">\n                                    <option value=\"${item.cateid}\">${item.catename}</option>\n                                </c:forEach>\n                            </select>\n                        </div>\n                        <div class=\"col-lg-6 col-md-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess2\">详细类别</label>\n                            <input type=\"text\" class=\"form-control\" id=\"inputWithSuccess2\" name=\"detailcate\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12\">\n                            <label class=\"control-label templatemo-block\">图片</label>\n                            <!-- <input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" class=\"margin-bottom-10\"> -->\n                            <input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" class=\"filestyle\" data-buttonName=\"btn-primary\" data-buttonBefore=\"true\" data-icon=\"false\" multiple=\"multiple\">\n                            <!-- <p>Maximum upload size is 5 MB.</p>  -->\n                        </div>\n                    </div>\n                    <div class=\"form-group text-right\">\n                        <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        <button type=\"reset\" class=\"templatemo-white-button\">重置</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>        <!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/bootstrap-filestyle.min.js\"></script>  <!-- http://markusslima.github.io/bootstrap-filestyle/ -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}', '成功', 'success');\n        });\n    </script>\n</c:if>\n</body>\n</html>\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/address.jsp",
    "content": "<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>Material Design Lite</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link href=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.cyan-light_blue.min.css\" rel=\"stylesheet\">\n    <%-- <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">--%>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/address.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <script src=\"${pageContext.request.contextPath}/js/distpicker.js\"></script>\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n\n        .finish-btn{\n            background-color:#e65b0e !important;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改地址模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-addr\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\" id=\"parentModal\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改地址</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-inline mt-2 mb-4\">\n                    <div  data-toggle=\"distpicker\" data-autoselect=\"3\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\" style=\"padding-left: 28px;padding-top: 10px\">省市区</label>\n                        <select class=\"form-control\" id=\"provinceUpdate\"></select>\n                        <select class=\"form-control\" id=\"cityUpdate\"></select>\n                        <select class=\"form-control\" id=\"countyUpdate\"></select>\n                    </div>\n                </form>\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"detailaddress\" class=\"col-sm-2 control-label\">详细地址</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"detailaddress\" id=\"detailaddress\"/>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">收货人</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"name\" id=\"name\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"telephone\" id=\"telephone\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveAddr\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--添加地址模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"insert-addr\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelInsert\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\" id=\"parentModalInsert\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelInsert\">添加地址</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-inline mt-2 mb-4\">\n                    <div  data-toggle=\"distpicker\" data-autoselect=\"3\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\" style=\"padding-left: 28px;padding-top: 10px\">省市区</label>\n                        <select class=\"form-control\" id=\"provinceInsert\"></select>\n                        <select class=\"form-control\" id=\"cityInsert\"></select>\n                        <select class=\"form-control\" id=\"countyInsert\"></select>\n                    </div>\n                </form>\n                <form class=\"form-horizontal\" id=\"insert-form\" name=\"insert-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"detailaddress\" class=\"col-sm-2 control-label\">详细地址</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"detailaddressInsert\" id=\"detailaddressInsert\"/>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">收货人</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"nameInsert\" id=\"nameInsert\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"telephoneInsert\" id=\"telephoneInsert\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"insertAddr\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">收货地址</span>\n            <div class=\"mdl-layout-spacer\">\n            </div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <button class=\"templatemo-blue-button\" name=\"insertAddr\"><h5>添加地址</h5></button>\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\"></div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n<c:forEach items=\"${addressList}\" var=\"item\">\n        <div class=\"mdl-grid demo-content\" id=\"parent\">\n            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                <div class=\"tab-content\">\n                    <table class=\"table\" cellpadding=\"6\" cellspacing=\"1\" address-id=\"${item.addressid}\" id=\"table\">\n                        <thead>\n                        <th style=\"border: 0px solid transparent\">\n                            <%--<h1>个人信息</h1>--%>\n                        </th>\n                        </thead>\n                        <tbody >\n                        <tr >\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">收货人</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"conname\">${item.conname}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">手机号</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"contel\">${item.contel}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">省</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"province\">${item.province}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">市</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"city\">${item.city}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">县/区</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"county\">${item.county}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">详细地址</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"detailaddr\">${item.detailaddr}</td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </div>\n                <div class=\"mdl-card__actions mdl-card--border\">\n                    <button class=\"templatemo-blue-button\" name=\"changeAddr\"><h5>修改地址</h5></button>\n                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n                    <button class=\"templatemo-blue-button finish-btn\" name=\"deleteAddr\"><h5>删除地址</h5></button>\n                </div>\n            </div>\n        </div>\n</c:forEach>\n       <%-- <div class=\"mdl-grid demo-content\" >\n            <div class=\"demo-charts mdl-color--white  mdl-shadow--2dp mdl-cell mdl-cell--2-col mdl-grid\">\n                <button class=\"templatemo-blue-button\" name=\"insertAddr\"><h5>添加地址</h5></button>\n            </div>\n        </div>--%>\n    </main>\n</div>\n<%--<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>--%>\n<script src=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/admin.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"\" class=\"active\">Admin panel</a></li>\n                        <li><a href=\"\">Dashboard</a></li>\n                        <li><a href=\"\">Overview</a></li>\n                        <li><a href=\"login.html\">Sign in form</a></li>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-flex-row flex-content-row\">\n                <div class=\"templatemo-content-widget white-bg col-2\">\n                    <i class=\"fa fa-times\"></i>\n                    <div class=\"square\"></div>\n                    <h2 class=\"templatemo-inline-block\">Visual Admin Template</h2><hr>\n                    <p>Works on all major browsers. IE 10+. Visual Admin is <a href=\"http://www.templatemo.com/tag/admin\" target=\"_parent\">free responsive admin template</a> for everyone. Feel free to use this template for your backend user interfaces. Please tell your friends about <a href=\"http://www.templatemo.com\" target=\"_parent\">templatemo.com</a> website. You may <a href=\"http://www.templatemo.com/contact\" target=\"_parent\">contact us</a> if you have anything to say.</p>\n                    <p>Nunc placerat purus eu tincidunt consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur. Fusce mi lacus, semper sit amet mattis eu.</p>\n                </div>\n                <div class=\"templatemo-content-widget white-bg col-1 text-center\">\n                    <i class=\"fa fa-times\"></i>\n                    <h2 class=\"text-uppercase\">Maris</h2>\n                    <h3 class=\"text-uppercase margin-bottom-10\">Design Project</h3>\n                    <%--<img src=\"${pageContext.request.contextPath}/image/bicycle.jpg\" alt=\"Bicycle\" class=\"img-circle img-thumbnail\">--%>\n                </div>\n                <div class=\"templatemo-content-widget white-bg col-1\">\n                    <i class=\"fa fa-times\"></i>\n                    <h2 class=\"text-uppercase\">Dictum</h2>\n                    <h3 class=\"text-uppercase\">Sedvel Erat Non</h3><hr>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"></div>\n                    </div>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 50%;\"></div>\n                    </div>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"templatemo-flex-row flex-content-row\">\n                <div class=\"col-1\">\n                    <div class=\"templatemo-content-widget orange-bg\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"media\">\n                            <div class=\"media-left\">\n                                <a href=\"#\">\n                                    <%--<img class=\"media-object img-circle\" src=\"images/sunset.jpg\" alt=\"Sunset\">--%>\n                                </a>\n                            </div>\n                            <div class=\"media-body\">\n                                <h2 class=\"media-heading text-uppercase\">Consectur Fusce Enim</h2>\n                                <p>Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur.</p>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"templatemo-content-widget white-bg\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"media\">\n                            <div class=\"media-left\">\n                                <a href=\"#\">\n                                    <%--<img class=\"media-object img-circle\" src=\"images/sunset.jpg\" alt=\"Sunset\">--%>\n                                </a>\n                            </div>\n                            <div class=\"media-body\">\n                                <h2 class=\"media-heading text-uppercase\">Consectur Fusce Enim</h2>\n                                <p>Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur.</p>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"col-1\">\n                    <div class=\"panel panel-default templatemo-content-widget white-bg no-padding templatemo-overflow-hidden\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"panel-heading templatemo-position-relative\"><h2 class=\"text-uppercase\">User Table</h2></div>\n                        <div class=\"table-responsive\">\n                            <table class=\"table table-striped table-bordered\">\n                                <thead>\n                                <tr>\n                                    <td>No.</td>\n                                    <td>First Name</td>\n                                    <td>Last Name</td>\n                                    <td>Username</td>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                <tr>\n                                    <td>1.</td>\n                                    <td>John</td>\n                                    <td>Smith</td>\n                                    <td>@jS</td>\n                                </tr>\n                                <tr>\n                                    <td>2.</td>\n                                    <td>Bill</td>\n                                    <td>Jones</td>\n                                    <td>@bJ</td>\n                                </tr>\n                                <tr>\n                                    <td>3.</td>\n                                    <td>Mary</td>\n                                    <td>James</td>\n                                    <td>@mJ</td>\n                                </tr>\n                                <tr>\n                                    <td>4.</td>\n                                    <td>Steve</td>\n                                    <td>Bride</td>\n                                    <td>@sB</td>\n                                </tr>\n                                <tr>\n                                    <td>5.</td>\n                                    <td>Paul</td>\n                                    <td>Richard</td>\n                                    <td>@pR</td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div> <!-- Second row ends -->\n            <div class=\"templatemo-flex-row flex-content-row templatemo-overflow-hidden\"> <!-- overflow hidden for iPad mini landscape view-->\n                <div class=\"col-1 templatemo-overflow-hidden\">\n                    <div class=\"templatemo-content-widget white-bg templatemo-overflow-hidden\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"templatemo-flex-row flex-content-row\">\n                            <div class=\"col-1 col-lg-6 col-md-12\">\n                                <h2 class=\"text-center\">Modular<span class=\"badge\">new</span></h2>\n                                <div id=\"pie_chart_div\" class=\"templatemo-chart\"></div> <!-- Pie chart div -->\n                            </div>\n                            <div class=\"col-1 col-lg-6 col-md-12\">\n                                <h2 class=\"text-center\">Interactive<span class=\"badge\">new</span></h2>\n                                <div id=\"bar_chart_div\" class=\"templatemo-chart\"></div> <!-- Bar chart div -->\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <footer class=\"text-right\">\n                <div class=\"button\">欢迎报考长沙理工大学</div>\n                <p>Copyright &copy; 2019 Company Name\n                    | Designed by <a href=\"http://www.templatemo.com\" target=\"_parent\">张鑫</a></p>\n            </footer>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>      <!-- jQuery -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.min.js\"></script> <!--  jQuery Migrate Plugin -->\n<script src=\"https://www.google.com/jsapi\"></script> <!-- Google Chart -->\n<script>\n    /* Google Chart\n     -------------------------------------------------------------------*/\n    // Load the Visualization API and the piechart package.\n    google.load('visualization', '1.0', {'packages':['corechart']});\n\n    // Set a callback to run when the Google Visualization API is loaded.\n    google.setOnLoadCallback(drawChart);\n\n    // Callback that creates and populates a data table,\n    // instantiates the pie chart, passes in the data and\n    // draws it.\n    function drawChart() {\n\n        // Create the data table.\n        var data = new google.visualization.DataTable();\n        data.addColumn('string', 'Topping');\n        data.addColumn('number', 'Slices');\n        data.addRows([\n            ['Mushrooms', 3],\n            ['Onions', 1],\n            ['Olives', 1],\n            ['Zucchini', 1],\n            ['Pepperoni', 2]\n        ]);\n\n        // Set chart options\n        var options = {'title':'How Much Pizza I Ate Last Night'};\n\n        // Instantiate and draw our chart, passing in some options.\n        var pieChart = new google.visualization.PieChart(document.getElementById('pie_chart_div'));\n        pieChart.draw(data, options);\n\n        var barChart = new google.visualization.BarChart(document.getElementById('bar_chart_div'));\n        barChart.draw(data, options);\n    }\n\n    $(document).ready(function(){\n        if($.browser.mozilla) {\n            //refresh page on browser resize\n            // http://www.sitepoint.com/jquery-refresh-page-browser-resize/\n            $(window).bind('resize', function(e)\n            {\n                if (window.RT) clearTimeout(window.RT);\n                window.RT = setTimeout(function()\n                {\n                    this.location.reload(false); /* false to get page from cache */\n                }, 200);\n            });\n        } else {\n            $(window).resize(function(){\n                drawChart();\n            });\n        }\n    });\n\n</script>\n<script type=\"text/javascript\" src=\"js/templatemo-script.js\"></script>      <!-- Templatemo Script -->\n\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminAllGoods.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <%--<script src=\"${pageContext.request.contextPath}/js/jquery.form.min.js\"></script>--%>\n    <style>\n        .show-span {\n            border: none !important;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-goods\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改商品信息</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"goodsid\" class=\"col-sm-2 control-label\">id</label>\n                        <div class=\"col-sm-9\">\n                            <span id=\"goodsid\" class=\"form-control\"></span>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"goodsname\" class=\"col-sm-2 control-label\">商品名</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"goodsname\" id=\"goodsname\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"price\" class=\"col-sm-2 control-label\">价格</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"number\" class=\"form-control\" name=\"price\" id=\"price\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"num\" class=\"col-sm-2 control-label\">数量</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"number\" class=\"form-control\" id=\"num\" name=\"num\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"description\" class=\"col-sm-2 control-label\">描述</label>\n                        <div class=\"col-sm-9\">\n                            <textarea class=\"form-control\" id=\"description\" name=\"description\"></textarea>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"category\" class=\"col-sm-2 control-label\">类别</label>\n                        <div class=\"col-sm-9\">\n                            <select class=\"form-control\" id=\"category\" name=\"category\">\n                                <c:forEach items=\"${categoryList}\" var=\"item\">\n                                    <option value=\"${item.cateid}\">${item.catename}</option>\n                                </c:forEach>\n                            </select>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"detailcate\" class=\"col-sm-2 control-label\">详细分类</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"detailcate\" name=\"detailcate\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveUpdate\">保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--修改商品活动--%>\n<div class=\"modal fade\" id=\"activity-goods\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\">添加商品活动</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"templatemo-login-form\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <div id=\"activity-goodsid\" hidden></div>\n                            <label class=\"control-label\" for=\"activity-id\">活动号</label>\n                            <select class=\"form-control\" id=\"activity-id\">\n                                <option value=\"1\">1</option>\n                                <option value=\"1\">1</option>\n                                <option value=\"1\">1</option>\n                            </select>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"activityname\">活动名称</label>\n                            <span type=\"text\" class=\"form-control show-span\" id=\"activityname\" name=\"activityname\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"discount\">折扣</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"discount\" name=\"discount\" step=\"0.01\"></span>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"fullprice\">满</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"fullprice\" name=\"fullprice\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"reduceprice\">减</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"reduceprice\" name=\"reduceprice\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"fullnum\">满</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"fullnum\" name=\"fullnum\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"reducenum\">免</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"reducenum\" name=\"reducenum\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"activitydes\">活动描述</label>\n                            <span class=\"form-control show-span\" id=\"activitydes\" rows=\"3\" name=\"activitydes\">asfd</span>\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveActivity\">保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动<span class=\"caret\"></span></a></td>\n                            <td>详情</td>\n                            <td>编辑</td>\n                            <td>删除</td>\n                            <td>活动</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <%--<c:forEach items=\"${pageInfo.list}\" var=\"goods\" varStatus=\"num\">\n                            <tr>\n                                <td>${goods.goodsid}</td>\n                                <td>${goods.goodsname}</td>\n                                <td>${goods.price}</td>\n                                <td>${goods.num}</td>\n                                <td>${goods.detailcate}</td>\n                                <td><a href=\"\" class=\"templatemo-link\">详情</a></td>\n                                <td><button href=\"\" class=\"templatemo-edit-btn\">编辑</button></td>\n                                <td><button href=\"\" class=\"templatemo-delete-btn\">删除</button></td>\n                            </tr>\n                        </c:forEach>--%>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    <%--当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录--%>\n                </div>\n                <%--<ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>--%>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/goodsManage.js\"></script>\n<!-- Templatemo Script -->\n<script>\n    $(document).ready(function () {\n        // Content widget with background image\n        var imageUrl = $('img.content-bg-img').attr('src');\n        $('.templatemo-content-img-bg').css('background-image', 'url(' + imageUrl + ')');\n        $('img.content-bg-img').hide();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminAllOrder.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                    <div class=\"margin-bottom-10\">\n                                        <a href=\"${pageContext.request.contextPath}/admin/order/sendGoods?orderid=${orderInfo.orderid}\" class=\"templatemo-edit-btn pull-right\">发货</a>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n                <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                    <div class=\"page-info\" id=\"page-info-area\">\n                        当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                    </div>\n                    <ul class=\"pagination\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\">首页</span>\n                            </a>\n                        </li>\n\n                        <c:if test=\"${pageInfo.hasPreviousPage}\">\n                            <li>\n                                <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                    <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                                </a>\n                            </li>\n                        </c:if>\n\n                        <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                            <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                            </c:if>\n                            <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                            </c:if>\n                        </c:forEach>\n\n                        <c:if test=\"${pageInfo.hasNextPage}\">\n                            <li>\n                                <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                    <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                                </a>\n                            </li>\n                        </c:if>\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\">末页</span>\n                            </a>\n                        </li>\n                    </ul>\n                </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminLogin.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>管理员登录</title>\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n    <style type=\"text/css\">\n        .button\n        {\n            clear:both;\n            margin:10px auto;\n            text-align:center;\n            font-size: 20px;\n            padding:10px 0;\n            line-height:25px;\n            color:#666;\n            border-top:#ddd 1px solid;\n        }\n        .button a\n        {\n            margin:0 7px;\n            color:#666;\n        }\n        .button a:hover\n        {\n            color:#000;\n            text-decoration:none;\n        }\n    </style>\n</head>\n<body class=\"light-gray-bg\">\n<div class=\"templatemo-content-widget templatemo-login-widget white-bg\">\n    <header class=\"text-center\">\n        <div class=\"square\"></div>\n        <h1>管理员登录</h1>\n    </header>\n    <form action=\"${pageContext.request.contextPath}/admin/confirmLogin\" class=\"templatemo-login-form\" method=\"post\">\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <div class=\"input-group-addon\"><i class=\"fa fa-user fa-fw\"></i></div>\n                <input type=\"text\" class=\"form-control\" placeholder=\"用户名\" name=\"adminname\">\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <div class=\"input-group-addon\"><i class=\"fa fa-key fa-fw\"></i></div>\n                <input type=\"password\" class=\"form-control\" placeholder=\"密码\" name=\"password\">\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"checkbox squaredTwo\">\n                <input type=\"checkbox\" id=\"c1\" name=\"cc\" />\n                <%--<label for=\"c1\"><span></span>记住密码</label>--%>\n                <span class=\"error-msg\">${errorMsg}</span>\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <button type=\"submit\" class=\"templatemo-blue-button width-100\">登录</button>\n        </div>\n    </form>\n</div>\n\n<div class=\"button\">欢迎报考长沙理工大学</div>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminOrderComplete.jsp",
    "content": "<<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminOrderNav.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-top-nav-container\">\n    <div class=\"row\">\n        <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n            <ul class=\"text-uppercase\">\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/send\">未发货</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/receiver\">未收货</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/complete\">已完成</a></li>\n                <%--<li><a href=\"login.html\">Sign in form</a></li>--%>\n            </ul>\n        </nav>\n    </div>\n</div>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/adminOrderReceive.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/category.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>淘一淘类别</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <style>\n        .like-button {\n            left: 80% !important;\n            top: 70% !important;\n        }\n        .data>ul {\n            padding: 0;\n        }\n        .page-div {\n            margin-top: 10px;\n        }\n        .page-info {\n            padding: 35px 35px 35px 55px;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"content\">\n        <div class=\"module\">\n            <div class=\"\">\n                <h3>\n                    类别><span style=\"color: red;\">${cate}</span>\n                </h3>\n                <hr>\n            </div>\n\n            <div class=\"bd\">\n                <div class=\"data\">\n                    <ul>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                            <li class=\"data-item-li\">\n                                <div class=\"to-big\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\" width=\"260px\" height=\"260px\" alt=\"\"/>\n                                    </a>\n                                </div>\n                                <p class=\"text-right\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                </p>\n                                <div class=\"text-right\">\n                                    <b>￥${goods.price}</b>\n                                </div>\n                                <div>\n                                    <c:if test=\"${goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <c:if test=\"${!goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                </div>\n                            </li>\n                        </c:forEach>\n\n                        <div class=\"clear-float\" style=\"clear: both;\"></div>\n                    </ul>\n                </div>\n                <div class=\"row page-div\">\n                    <div class=\"col-md-5 page-info\">\n                        当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                    </div>\n                    <div class=\"col-md-6\">\n                        <nav aria-label=\"Page navigation\">\n                            <ul class=\"pagination pagination-lg\">\n\n                                <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                    <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                        <li class=\"active\"><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                    <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                        <li><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                </c:forEach>\n\n                                <c:if test=\"${pageInfo.hasNextPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasNextPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n                            </ul>\n                        </nav>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/chatrobot.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-小淘</title>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chatrobot.css\">\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css\">\n    <!-- <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\"> -->\n    <!-- <script src=\"https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script> -->\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"chat-div\">\n        <div class=\"chat\">\n            <div class=\"chat-content\">\n                <div class=\"chat-content-body\">\n                </div>\n            </div>\n            <div class=\"chat-input\">\n                <div class=\"form-div\">\n                    <div class=\"form-inline\">\n                        <div class=\"form-group input-div\">\n                            <textarea class=\"form-control\" name=\"message\" id=\"input-message\" rows=\"2\"></textarea>\n                        </div>\n                        <div class=\"form-group send-div\">\n                            <input class=\"form-control btn btn-primary btn-block\" id=\"send-message\" type=\"submit\" value=\"发送\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/detail.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!doctype html>\n<html class=\"\" lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n    <title>长理商城-${goodsInfo['goods'].goodsname}</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!-- all css here -->\n    <!-- bootstrap v3.3.6 css -->\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\">\n\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\">\n    <!-- style css -->\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/style.css\">\n\n    <link href=\"${pageContext.request.contextPath}/css/shopdetail.css\" rel=\"stylesheet\">\n    <!-- <script src=\"./detail/js/jquery.js\"></script> -->\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n\n    <%--<script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>--%>\n\n    <!-- bootstrap js -->\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/detail.js\"></script>\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            var showproduct = {\n                \"boxid\": \"showbox\",\n                \"sumid\": \"showsum\",\n                \"boxw\": 400,\n                \"boxh\": 550,\n                \"sumw\": 60, //列表每个宽度,该版本中请把宽高填写成一样\n                \"sumh\": 60, //列表每个高度,该版本中请把宽高填写成一样\n                \"sumi\": 7, //列表间隔\n                \"sums\": 5, //列表显示个数\n                \"sumsel\": \"sel\",\n                \"sumborder\": 1, //列表边框，没有边框填写0，边框在css中修改\n                \"lastid\": \"showlast\",\n                \"nextid\": \"shownext\"\n            }; //参数定义\n            $.ljsGlasses.pcGlasses(showproduct); //方法调用，务必在加载完后执行\n\n            $(function () {\n\n                $('.tabs a').click(function () {\n\n                    var $this = $(this);\n                    $('.panel').hide();\n                    $('.tabs a.active').removeClass('active');\n                    $this.addClass('active').blur();\n                    var panel = $this.attr(\"href\");\n                    $(panel).show();\n                    return fasle; //告诉浏览器  不要纸箱这个链接\n                }); //end click\n\n\n                $(\".tabs li:first a\").click(); //web 浏览器，单击第一个标签吧\n\n            }); //end ready\n\n            $(\".centerbox li\").click(function () {\n                $(\"li\").removeClass(\"now\");\n                $(this).addClass(\"now\");\n\n            });\n\n            /*$(\"#chatto\").click(function () {\n                $.ajax({\n                    url: \"/shop/chat/\", //把表单数据发送到ajax.jsp\n                    type: \"POST\",\n                    data: {\n                        sendto: 5\n                    },\n                    error: function (request) {\n                        alert(result.msg);\n                    },\n                    success: function (result) {\n                    }\n                });\n            });*/\n\n            $('.fav-button').click(function(){\n                //$(this).removeClass(\"glyphicon-heart-empty\");\n                var goodsId = $(this).attr('data-id');\n                var isChangeBtn = true;\n                if(!$(this).children(\"i\").hasClass('fa-heart')) {\n                    //收藏\n                    $.ajax({\n                        url:\"/shop/collect\",\n                        type:\"POST\",\n                        data:{\n                            goodsid:goodsId\n                        },\n                        success:function (result) {\n                            //收藏成功\n                            if(result.code === 200){\n                                location.href = \"/shop/login\";\n                                isChangeBtn = false;\n                            }\n                        },\n                        error:function () {\n                            alert(\"收藏失败\");\n                        }\n                    })\n                } else {\n                    //取消收藏\n                    $.ajax({\n                        url:\"/shop/deleteCollect\",\n                        type:\"POST\",\n                        data:{\n                            goodsid:goodsId\n                        },\n                        success:function (result) {\n                            //取消收藏成功\n                            if(result.code === 200){\n                                location.href = \"/shop/login\";\n                                isChangeBtn = false;\n                            }\n                        },\n                        error:function () {\n                            alert(\"取消收藏失败\");\n                        }\n                    })\n                }\n\n                /*$.post(\"servlet/CollectServlet\", {\n                 goodsId: goodsId,\n                 });\n                 // alert(\"商品已加入购物车！\");*/\n\n                if(isChangeBtn) {\n                    $(this).children(\"i\").toggleClass(\"fa-heart fa-heart-o\");\n                    var likeContent = $(this).children(\"span\").text();\n                    if(likeContent == '收藏'){\n                        $(this).children(\"span\").text('取消收藏');\n                    } else {\n                        $(this).children(\"span\").text('收藏');\n                    }\n                }\n            });\n        });\n    </script>\n    <style>\n        .head{\n            width: 45px !important;\n            background: rgba(0,0,0,.0001) none repeat scroll 0 0 !important;\n            border: 1px solid rgba(0,0,0,.075) !important;\n        }\n        .span-block{\n            display: block !important;\n            padding:5px;\n        }\n    </style>\n\n</head>\n\n<body>\n<!--zoom elavator area one start-->\n<div class=\"elavator_area\">\n    <div class=\"container\">\n        <jsp:include page=\"header.jsp\"/>\n        <div class=\"shop_menu shop_menu_2 main-detail-div\">\n            <ul class=\"cramb_area cramb_area_5 main-detail-nav\">\n                <li><a href=\"/shop/main\">首页 /</a></li>\n                <%--<li><a href=\"index.html\">Shop /</a></li>\n                <li><a href=\"index.html\">Headlight/</a></li>\n                <li><a href=\"index.html\">Hats /</a></li>--%>\n                <li class=\"br-active\">${goodsInfo['goods'].goodsname}</li>\n            </ul>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-lg-5 col-md-5 col-sm-12 col-xs-12\">\n                <div class=\"shopdetails\">\n                    <div id=\"leftbox\">\n                        <div id=\"showbox\">\n                            <c:forEach items=\"${goodsInfo['image']}\" var=\"path\">\n                                <img src=\"${pageContext.request.contextPath}/pictures/${path.path}\" width=\"400\" height=\"400\"/>\n                            </c:forEach>\n                        </div>\n                        <div id=\"showsum\">\n                        </div>\n                        <p class=\"showpage\">\n                            <a href=\"javascript:void(0);\" id=\"showlast\"> < </a>\n                            <a href=\"javascript:void(0);\" id=\"shownext\"> > </a>\n                        </p>\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-lg-6 col-md-6 col-sm-12 col-xs-12\">\n                <div class=\"elav_titel\">\n                    <div class=\"elv_heading\">\n                        <h3>${goodsInfo['goods'].goodsname}</h3>\n                    </div>\n                    <div class=\"price_rating\">\n                        <%--<a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a class=\"not-rated\" href=\"#\">\n                            <i class=\"fa fa-star-o\"></i>\n                        </a>\n                        <a class=\"review-link\" href=\"#\">\n                            (\n                            <span class=\"count\">2</span>\n                            customer reviews)\n                        </a>--%>\n                    </div>\n                    <!-- <div class=\"evavet_description\">\n                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce posuere metus vitae arcu imperdiet, id aliquet ante scelerisque. Sed sit amet sem vitae urna fringilla tempus.</p>\n                    </div> -->\n                </div>\n                <div class=\"elav_info\">\n                    <!-- 价格 -->\n                    <div class=\"price_box price_box_acr new_meta\">\n                        <%--<span class=\"old- price old- price-2\">$250.00</span>--%>\n                        <span class=\"spical-price spical-price-2\">￥${goodsInfo['goods'].price}</span>\n                    </div>\n                    <div class=\"new_meta\">\n                            <span class=\"sku_wrapper big-font\">\n                                类别:\n                                <span class=\"sku\">${goodsInfo['cate'].catename}</span>\n                            </span>\n                        <span class=\"sku_wrapper big-font\">\n                                数量:\n                                <span class=\"sku\">${goodsInfo['goods'].num}</span>\n                            </span>\n                    </div>\n\n                    <div class=\"new_meta\">\n                            <span class=\"sku_wrapper big-font\">\n                                优惠:\n                                <c:if test=\"${goodsInfo['goods'].activityid != 1}\">\n                                    <span class=\"sku\">${goodsInfo['goods'].activity.activityname}</span>\n                                    <span class=\"span-block\">${goodsInfo['goods'].activity.activitydes}</span>\n                                    <span class=\"span-block\">折扣:${goodsInfo['goods'].activity.discount}</span>\n                                    <c:if test=\"${!empty goodsInfo['goods'].activity.fullprice}\">\n                                        <span class=\"span-block\">\n                                            满${goodsInfo['goods'].activity.fullprice}减${goodsInfo['goods'].activity.reduceprice}\n                                        </span>\n                                    </c:if>\n                                    <c:if test=\"${!empty goodsInfo['goods'].activity.fullnum}\">\n                                        <span class=\"span-block\">\n                                            满${goodsInfo['goods'].activity.fullnum}免${goodsInfo['goods'].activity.reducenum}\n                                        </span>\n                                    </c:if>\n                                </c:if>\n                                <c:if test=\"${goodsInfo['goods'].activityid == 1}\">\n                                    <span class=\"sku\">暂无优惠，敬请期待！</span>\n                                </c:if>\n                            </span>\n                    </div>\n                    <%--<div class=\"new_meta\"></div>--%>\n\n                    <div class=\"rel-div\">\n                        <div class=\"add_defi new_meta\">\n                            <a id=\"chatto\" href=\"#\" data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\" big-font\">\n                                <i class=\"fa fa-commenting\"></i>\n                                请查看商品说明后购买\n                            </a>\n                        </div>\n                        <form class=\"cart-btn-area new_meta\" action=\"${pageContext.request.contextPath}/addCart\" method=\"post\">\n                            <input type=\"hidden\" value=\"${goodsInfo['goods'].goodsid}\" name=\"goodsid\"/>\n                            <input type=\"number\" value=\"1\" name=\"goodsnum\">\n                            <button class=\"add-tocart cart_zpf\" type=\"submit\">加入购物车</button>\n                        </form>\n                        <div class=\"add_defi new_meta\">\n                            <a data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\"fav-button big-font\" data-id=\"${goodsInfo['goods'].goodsid}\">\n                                <c:if test=\"${goodsInfo['goods'].fav}\">\n                                    <i class=\"fa fa-heart\"></i>\n                                    取消收藏\n                                </c:if>\n                                <c:if test=\"${!goodsInfo['goods'].fav}\">\n                                    <i class=\"fa fa-heart-o\"></i>\n                                    <span class=\"like-content\">收藏</span>\n                                </c:if>\n                            </a>\n                        </div>\n                    </div>\n\n                    <!-- <div class=\"add_defi_2\">\n                        <a data-original-title=\"Compare\" title=\"\" data-toggle=\"tooltip\" rel=\"nofollow\" data-product_id=\"45\" href=\"\"><i class=\"fa fa-refresh another_icon\"></i> Compare</a>\n                    </div> -->\n\n                </div>\n            </div>\n            <!-- <div class=\"col-lg-4 col-md-4 col-sm-12 col-xs-12\">\n\n        </div> -->\n        </div>\n    </div>\n</div>\n<!--zoom elavator area one end-->\n<!--tab area start-->\n<div class=\"tab_area_start\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12 col-sm-12 col-xs-12 text-right\">\n                <div class=\"my-tabs\">\n                    <!-- Nav tabs -->\n                    <ul class=\"favtabs favtabs-2 favtabs-nytr\" role=\"tablist\">\n                        <%--<li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\">Discription</a></li>--%>\n                        <li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\"\n                                                                  data-toggle=\"tab\">商品描述</a></li>\n                        <li role=\"presentation\"><a href=\"#profile\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">评价\n                            (${commentList.size()})</a></li>\n                    </ul>\n                    <!-- Tab panes -->\n                    <div class=\"tab-content\">\n                        <div role=\"tabpanel\" class=\"tab-pane active\" id=\"home\">\n                            <div class=\"row\">\n                                <div class=\"col-md-12 col-xs-12\">\n                                    <div class=\"tb_desc\">\n                                        <h2>商品描述</h2>\n                                        <p>${goodsInfo['goods'].description}</p>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div role=\"tabpanel\" class=\"tab-pane\" id=\"profile\">\n                            <div class=\"row\">\n                                <div class=\"col-md-12 col-xs-12\">\n                                    <div class=\"tb_desc\">\n                                        <div class=\"review_area_heading\">\n                                            <div id=\"comnt\">\n                                                <h2>${commentList.size()}条评论</h2>\n                                                <ol class=\"commentlist\">\n                                                    <c:forEach items=\"${commentList}\" var=\"comment\">\n                                                        <li id=\"li-comment-22\" class=\"comment even thread-even depth-1\"\n                                                            itemscope=\"\">\n                                                            <div id=\"comment-22\" class=\"comment_container\">\n                                                                <img class=\"head avatar avatar-60 photo \"width=\"60\" height=\"60\"\n                                                                     src=\"${pageContext.request.contextPath}/image/head.jpg\" alt=\"\">\n                                                                <div class=\"comment-text\">\n                                                                    <div class=\"star-rating\" title=\"Rated ${comment.point} out of 5\"\n                                                                         itemscope=\"\">\n                                                                        <div class=\"price_rating price_rating_2\">\n                                                                          <c:forEach  begin=\"1\" end=\"${comment.point}\">\n                                                                              <a href=\"#\">\n                                                                                  <i class=\"fa fa-star\"></i>\n                                                                              </a>\n                                                                          </c:forEach>\n                                                                            <c:forEach begin=\"${comment.point+1}\" end=\"5\">\n                                                                                <a class=\"not-rated\" href=\"#\">\n                                                                                    <i class=\"fa fa-star-o\"\n                                                                                       aria-hidden=\"true\"></i>\n                                                                                </a>\n                                                                            </c:forEach>\n                                                                            <span>\n                                                                                <strong>${comment.point}</strong>\n                                                                                out of ${5-comment.point}\n                                                                            </span>\n                                                                        </div>\n                                                                    </div>\n                                                                    <p class=\"meta\">\n                                                                        <strong>${comment.username}</strong>\n                                                                        –\n                                                                        <time datetime=\"${comment.commenttime}\">\n                                                                            ${comment.commenttime.year+1900}年\n                                                                            ${comment.commenttime.month+1}月\n                                                                            ${comment.commenttime.date}日\n                                                                        </time>\n                                                                        :\n                                                                        <a  href=\"#\" data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\" big-font\">\n                                                                            <i class=\"fa fa-commenting\"></i>\n                                                                        </a>\n                                                                    </p>\n                                                                    <div class=\"description\">\n                                                                        <p>${comment.content}</p>\n                                                                    </div>\n                                                                </div>\n                                                            </div>\n                                                        </li>\n                                                    </c:forEach>\n                                                </ol>\n                                            </div>\n                                            <%--<div class=\"review_form_area\">\n                                                <div class=\"review_form\">\n                                                    <div class=\"revew_form_content\">\n                                                        <h3 id=\"reply-title\" class=\"comment-reply-title\">\n                                                            Add a review\n                                                            <small>\n                                                                <a id=\"cancel-comment-reply-link\" style=\"display:none;\" href=\"#\" rel=\"nofollow\">Cancel reply</a>\n                                                            </small>\n                                                        </h3>\n                                                        <form id=\"commentform\" class=\"comment-form\" method=\"post\" action=\"form\">\n                                                            <div class=\"comment-form-rating\">\n                                                                <label class=\"comment\">Your Rating</label>\n                                                                <div class=\"price_rating price_rating_2 price_rating_3\">\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                </div>\n                                                            </div>\n                                                            <div class=\"comment-form-comment\">\n                                                                <label class=\"comment\">Your Review</label>\n                                                                <textarea id=\"comment\" aria-required=\"true\" rows=\"8\" cols=\"45\" name=\"comment\"></textarea>\n                                                            </div>\n                                                            <div class=\"comment-form-author\">\n                                                                <label class=\"comment\">\n                                                                    Name\n                                                                    <span class=\"required required_menu\">*</span>\n                                                                </label>\n                                                                <input id=\"author\" class=\"mix_type\" type=\"text\" aria-required=\"true\" size=\"30\" value=\"\" name=\"author\">\n                                                            </div>\n                                                            <div class=\"comment-form-email\">\n                                                                <label class=\"comment\">\n                                                                    Email\n                                                                    <span class=\"required required_menu\">*</span>\n                                                                </label>\n                                                                <input id=\"email\" class=\"mix_type\" type=\"text\" aria-required=\"true\" size=\"30\" value=\"\" name=\"email\">\n                                                            </div>\n                                                            <div class=\"form-submit\">\n                                                                <input id=\"sub\" class=\"submt\" type=\"submit\" value=\"Submit\" name=\"submit\">\n                                                            </div>\n                                                        </form>\n                                                    </div>\n                                                </div>\n                                            </div>--%>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!--tab area end-->\n<!-- jquery latest version -->\n<!-- <script src=\"js/vendor/jquery-1.12.0.min.js\"></script> -->\n<!-- bootstrap js -->\n<!-- <script src=\"js/bootstrap.min.js\"></script> -->\n\n</body>\n</html>\n\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/favorite.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!doctype html>\n\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息-收藏</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link href=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.cyan-light_blue.min.css\" rel=\"stylesheet\">\n    <%-- <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">--%>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/information.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n        .content{\n            margin: 23px 1px;\n        }\n        .page-info {\n            padding: 30px 30px 30px 50px;\n        }\n        .like-button{\n            left: 75% !important;\n            top: 65% !important;\n        }\n    </style>\n    <script>\n        $(document).ready(function () {\n            $(\".data-item-li\").hover(function(){\n                //需处理显示哪个按钮\n                // $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n                $(this).find(\".like-button\").show();\n            },function(){\n                $(this).find(\".like-button\").hide();\n            });\n            $(\".like-button\").click(function () {\n                var goodsId = $(this).attr(\"data-id\");\n                //取消收藏\n                $.ajax({\n                    url:\"/shop/deleteCollect\",\n                    type:\"POST\",\n                    data:{\n                        goodsid:goodsId\n                    },\n                    success:function (result) {\n                        //取消收藏成功\n                        if(result.code === 100){\n                            location.reload();\n                        }\n                    },\n                    error:function () {\n                        alert(\"取消收藏失败\");\n                    }\n                });\n            });\n        });\n    </script>\n</head>\n<body>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">我的收藏</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <div class=\"mdl-layout-spacer\"></div>\n\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n        <div class=\"mdl-grid demo-content\">\n            <div class=\"content\">\n                <div class=\"module\">\n                    <div class=\"bd\">\n                        <div class=\"data\">\n                            <ul>\n                                <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                                    <li class=\"data-item-li\">\n                                        <div class=\"to-big\">\n                                            <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\" width=\"240px\" height=\"240px\" alt=\"\"/>\n                                            </a>\n                                        </div>\n                                        <p class=\"text-right\">\n                                            <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                        </p>\n                                        <div class=\"text-right\">\n                                            <b>￥${goods.price}</b>\n                                        </div>\n                                        <div>\n                                            <c:if test=\"${goods.fav}\">\n                                                <button\n                                                        class=\"like-button glyphicon glyphicon-trash btn btn-default\"\n                                                        data-id=\"${goods.goodsid}\"\n                                                        style=\"display: none;\"></button>\n                                            </c:if>\n\n                                            <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                        </div>\n                                    </li>\n                                </c:forEach>\n\n                                <div class=\"clear-float\" style=\"clear: both;\"></div>\n                            </ul>\n                        </div>\n                        <div class=\"row page-div\">\n                            <div class=\"col-md-5 page-info\">\n                                当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                            </div>\n                            <div class=\"col-md-6\">\n                                <nav aria-label=\"Page navigation\">\n                                    <ul class=\"pagination pagination-lg\">\n\n                                        <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                            <li>\n                                                <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                                    <span aria-hidden=\"true\">&laquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                            <li class=\"disabled\">\n                                                <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                                    <span aria-hidden=\"true\">&laquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                            <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                                <li class=\"active\"><a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageNums}\">${pageNums}</a></li>\n                                            </c:if>\n                                            <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                                <li><a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageNums}\">${pageNums}</a></li>\n                                            </c:if>\n                                        </c:forEach>\n\n                                        <c:if test=\"${pageInfo.hasNextPage}\">\n                                            <li>\n                                                <a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                                    <span aria-hidden=\"true\">&raquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:if test=\"${!pageInfo.hasNextPage}\">\n                                            <li class=\"disabled\">\n                                                <a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                                    <span aria-hidden=\"true\">&raquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                    </ul>\n                                </nav>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </main>\n</div>\n<%--<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>--%>\n<script src=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/goodsNav.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-top-nav-container\">\n    <div class=\"row\">\n        <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n            <ul class=\"text-uppercase\">\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/show\">所有商品</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/add\">添加商品</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>\n                <%--<li><a href=\"login.html\">。。。</a></li>--%>\n            </ul>\n        </nav>\n    </div>\n</div>\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/header.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\">\n<div class=\"row\">\n    <div class=\"col-md-4\" role=\"navigation\">\n        <!-- <h1 style=\"font-size: 20px;margin-top: 9px\">东大咸鱼</h1> -->\n\n        <ul class=\"nav nav-pills\">\n            <c:if test=\"${empty sessionScope.user}\">\n                <li><a href=\"${pageContext.request.contextPath}/login\" style=\"color: #F22E00\">请登录</a></li>\n            </c:if>\n            <c:if test=\"${!empty sessionScope.user}\">\n                <li class=\"info-a\">\n                    <a href=\"${pageContext.request.contextPath}/information\" style=\"color: #F22E00\">\n                        ${sessionScope.user.username}\n                    <span class=\"glyphicon glyphicon-triangle-bottom\" style=\"font-size: 5px;margin-left: 7px;\" aria-hidden=\"true\">\n                    </span>\n                    </a>\n                    <ul class=\"dropdown-menu\">\n                        <li><a href=\"${pageContext.request.contextPath}/information\">账户管理</a></li>\n                        <li role=\"separator\" class=\"divider\"></li>\n                        <li><a href=\"${pageContext.request.contextPath}/logout\" class=\"login-out\">退出登录</a></li>\n                    </ul>\n                </li>\n            </c:if>\n\n            <li><a href=\"${pageContext.request.contextPath}/register\">注册</a></li>\n        </ul>\n    </div>\n    <div class=\"col-md-8\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li><a href=\"${pageContext.request.contextPath}/showcart\"> <i\n                    class=\"fa fa-shopping-cart\" style=\"color: #F22E00\"></i>\n                购物车\n            </a></li>\n            <li><a href=\"${pageContext.request.contextPath}/info/favorite\"> <i\n                    class=\"fa fa-star\"></i> 收藏夹\n            </a></li>\n        </ul>\n    </div>\n</div>\n<div id=\"header-nav\">\n    <nav class=\"navbar navbar-default\" id=\"header-nav-middle\">\n        <div class=\"container-fluid\">\n            <!-- Brand and toggle get grouped for better mobile display -->\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle collapsed\"\n                        data-toggle=\"collapse\"\n                        data-target=\"#bs-example-navbar-collapse-1\"\n                        aria-expanded=\"false\">\n                    <span class=\"sr-only\">Toggle navigation</span> <span\n                        class=\"icon-bar\"></span> <span class=\"icon-bar\"></span> <span\n                        class=\"icon-bar\"></span>\n                </button>\n                <a class=\"navbar-brand\" href=\"${pageContext.request.contextPath}/main\"><!-- <img alt=\"Brand\" style=\"display: inline-block;\" src=\"./image/tao.jpg\" width=\"20\" height=\"20\"> --><span class=\"logo-word\">长理商城</span></a>\n            </div>\n\n            <!-- Collect the nav links, forms, and other content for toggling -->\n            <div class=\"collapse navbar-collapse\"\n                 id=\"bs-example-navbar-collapse-1\">\n                <ul class=\"nav navbar-nav\">\n                    <li><a class=\"a-color\" href=\"${pageContext.request.contextPath}/main\">首页</a></li>\n                    <li><a class=\"a-color\" href=\"${pageContext.request.contextPath}/information\">个人信息</a></li>\n                    <li class=\"dropdown\"><a class=\"a-color\" href=\"${pageContext.request.contextPath}/info/list\"\n                                            class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\"\n                                            aria-haspopup=\"true\" aria-expanded=\"false\">我的订单 <span\n                            class=\"caret\"></span></a>\n                        <ul class=\"dropdown-menu\">\n                            <li><a href=\"${pageContext.request.contextPath}/info/address\">地址管理</a></li>\n                            <li><a href=\"${pageContext.request.contextPath}/order\">交易中</a></li>\n                            <li role=\"separator\" class=\"divider\"></li>\n                        </ul></li>\n                </ul>\n\n                <form class=\"navbar-form navbar-right\" role=\"search\" method=\"get\" action=\"${pageContext.request.contextPath}/search\">\n                    <div class=\"form-group\">\n                        <input type=\"text\" class=\"form-control\" placeholder=\"Search\" name=\"keyword\">\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-default\">\n                        <span class=\"glyphicon glyphicon-search\" aria-label=\"搜索\"></span>\n                    </button>\n                </form>\n            </div>\n            <!-- /.navbar-collapse -->\n        </div>\n        <!-- /.container-fluid -->\n    </nav>\n</div>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/information.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!doctype html>\n<!--\nMaterial Design Lite\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License\n-->\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link href=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.cyan-light_blue.min.css\" rel=\"stylesheet\">\n    <%-- <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">--%>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/information.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-info\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改个人信息</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">昵称</label>\n                        <div class=\"col-sm-9\">\n                            <div  name=\"name\" id=\"name\"></div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"email\" class=\"col-sm-2 control-label\">邮箱</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"email\" id=\"email\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"telephone\" name=\"telephone\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveInfo\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-Psw\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelPsw\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelPsw\">修改密码</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"updatePsw-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"oldPsw\" class=\"col-sm-2 control-label\">旧密码</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"password\" class=\"form-control\" name=\"oldPsw\" id=\"oldPsw\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\" style=\"display: none\" id=\"oldPswError\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\"></label>\n                        <div class=\"col-sm-9\">\n                            <label style=\"color: #BD1F3B\">密码错误</label>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"newPsw\" class=\"col-sm-2 control-label\">新密码</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"password\" class=\"form-control\" name=\"newPsw\" id=\"newPsw\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\" style=\"display: none\" id=\"newPswError\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\"></label>\n                        <div class=\"col-sm-9\">\n                            <label style=\"color: #BD1F3B\">密码应长度大于8</label>\n                        </div>\n                    </div>\n\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"savePsw\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">个人信息</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n               <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                    <i class=\"material-icons\">search</i>\n                </label>\n                <div class=\"mdl-textfield__expandable-holder\">\n                    <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                    <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                </div>--%>\n            </div>\n           <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                <i class=\"material-icons\">more_vert</i>\n            </button>\n            <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                <li class=\"mdl-menu__item\">About</li>\n                <li class=\"mdl-menu__item\">Contact</li>\n                <li class=\"mdl-menu__item\">Legal information</li>\n            </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n           <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>用户后台管理</h1>\n               <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\">\n                </div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n        <div class=\"mdl-grid demo-content\">\n            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                <div class=\"tab-content\">\n                        <table class=\"table\" cellpadding=\"6\" cellspacing=\"1\">\n                            <thead>\n                            <th style=\"border: 0px solid transparent\">\n                                <%--<h1>个人信息</h1>--%>\n                            </th>\n                            </thead>\n                            <tbody >\n                            <tr >\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">用户号</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"userIdVal\">${user.getUserid()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">用户名</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"nameVal\">${user.getUsername()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">注册时间</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"regTimeVal\">\n                                    ${user.regtime.year+1900} 年\n                                    ${user.regtime.month+1} 月\n                                    ${user.regtime.date} 日\n                                </td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">邮箱</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"emailVal\">${user.getEmail()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">手机号</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"telephoneVal\">${user.getTelephone()}</td>\n                            </tr>\n                            <i Psw=\"${user.getPassword()}\" id=\"Psw\"></i>\n                            </tbody>\n                        </table>\n                    </div>\n                <div class=\"mdl-card__actions mdl-card--border\">\n                    <button class=\"templatemo-blue-button\" id=\"changeInfo\"><h5>修改信息</h5></button>\n                    <button class=\"templatemo-blue-button\" id=\"changePsw\"><h5>修改密码</h5></button>\n                </div>\n            </div>\n        </div>\n    </main>\n</div>\n<%--<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>--%>\n<script src=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/list.jsp",
    "content": "<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息-我的订单</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link href=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.cyan-light_blue.min.css\" rel=\"stylesheet\">\n   <%-- <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">--%>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/list.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <script src=\"${pageContext.request.contextPath}/js/distpicker.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.raty.js\"></script>\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n\n        .no-border{border: 0px solid transparent !important;}\n\n        .bs-example {\n            position: relative;\n            padding: 45px 15px 15px;\n            margin: 0 -15px 15px;\n            border-color: #e5e5e5 #eee #eee;\n            border-style: solid;\n            border-width: 1px 0;\n            -webkit-box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n            box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n        }\n\n        .finish-btn{\n            background-color:#e65b0e !important;\n        }\n\n        .font-color{\n            color: #00BBD6; !important;\n        }\n\n\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"evaluate\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelPsw\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelPsw\">商品评价</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"updatePsw-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"star\" class=\"col-sm-2 control-label\">商品评分</label>\n                        <div class=\"col-sm-9\">\n                            <div id=\"star\" data-num=\"3.5\"></div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"description\" class=\"col-sm-2 control-label\">详细描述</label>\n                        <div class=\"col-sm-9\">\n                            <textarea class=\"form-control\" rows=\"3\" id=\"description\"></textarea>\n                        </div>\n                    </div>\n\n\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveEvaluate\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">订单管理</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\"></div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n            <div class=\"mdl-grid demo-content\" id=\"parent\">\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>未发货</h3><%--未收到货--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${!order.issend}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                            <div class=\"tab-content col-lg-12\">\n                                <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                    <tbody>\n                                    <td class=\"no-border col-lg-9\" >\n                                        订单号：<i name=\"orderid\">${order.orderid}</i>\n                                        &nbsp;\n                                        &nbsp;\n                                        订单日期:\n                                            ${order.ordertime.year+1900} 年\n                                            ${order.ordertime.month+1} 月\n                                            ${order.ordertime.date} 日\n                                        &nbsp;\n                                        收货地址:\n                                            ${order.address.province}\n                                            ${order.address.city}\n                                            ${order.address.county}\n                                    </td>\n                                    <%--<td class=\"no-border col-lg-7\">\n                                        订单日期:\n                                            ${order.ordertime.year+1900} 年\n                                            ${order.ordertime.month+1} 月\n                                            ${order.ordertime.date} 日\n                                        &nbsp;\n                                        收货地址:\n                                            ${order.address.province}\n                                            ${order.address.city}\n                                            ${order.address.county}\n                                    </td>--%>\n                                    <td  class=\"no-border col-lg-3\">\n                                        原价:${order.oldprice}  现价:${order.newprice}\n                                    </td>\n                                    </tbody>\n                                </table>\n                                <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                    <tbody>\n                                    <tr>\n                                        <td class=\"col-lg-1\">\n                                            商品号\n                                        </td>\n                                        <td class=\"col-lg-2\">\n                                            商品名称\n                                        </td>\n                                        <td class=\"col-lg-1\">\n                                            价格\n                                        </td>\n                                        <td class=\"col-lg-1\">\n                                            数量\n                                        </td>\n                                        <td class=\"col-lg-2\">\n                                            商品分类\n                                        </td>\n                                    </tr>\n                                    </tbody>\n                                </table>\n                            <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                            </c:forEach>\n                            </div>\n                            <div class=\"mdl-card__actions mdl-card--border\">\n                            </div>\n                        </div>\n                        </c:if>\n                    </c:forEach>\n\n                </div>\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>未收货</h3><%--未完成--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${order.issend&&!order.isreceive}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                                <div class=\"tab-content col-lg-12\">\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"no-border col-lg-9\" >\n                                                订单号：<i name=\"orderid\">${order.orderid}</i>\n                                                &nbsp;\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>\n                                            <%--<td class=\"no-border col-lg-7\">\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                &nbsp;\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>--%>\n                                            <td  class=\"no-border col-lg-3\">\n                                                原价:${order.oldprice}  现价:${order.newprice}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                商品号\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品名称\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                价格\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                数量\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品分类\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    </c:forEach>\n                                </div>\n                                <div class=\"mdl-card__actions mdl-card--border\">\n                                    <button class=\"templatemo-blue-button \" name=\"finishList\"><h5>完成订单</h5></button>\n                                </div>\n                            </div>\n                        </c:if>\n                    </c:forEach>\n\n                </div>\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>已完成</h3><%--已完成--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${order.iscomplete}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                                <div class=\"tab-content col-lg-12\">\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"no-border col-lg-9\" >\n                                                订单号：<i name=\"orderid\">${order.orderid}</i>\n                                                &nbsp;\n                                                &nbsp;\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>\n                                           <%-- <td class=\"no-border col-lg-7\">\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                &nbsp;\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>--%>\n                                            <td  class=\"no-border col-lg-3\">\n                                               原价:${order.oldprice}  现价:${order.newprice}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                商品号\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品名称\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                价格\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                数量\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品分类\n                                            </td>\n                                            <td class=\"col-lg-1\">\n\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect font-color\" name=\"evaluate\" ><h5>评价</h5></button>\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    </c:forEach>\n                                </div>\n                                <div class=\"mdl-card__actions mdl-card--border\">\n                                    <button class=\"templatemo-blue-button finish-btn\" name=\"deleteList\"><h5>删除订单</h5></button>\n                                </div>\n                            </div>\n                        </c:if>\n                    </c:forEach>\n                </div>\n            </div>\n    </main>\n</div>\n\n<%--<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>--%>\n<script src=\"https://cdn.bootcss.com/material-design-lite/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/login.jsp",
    "content": "<%@page import=\"java.security.interfaces.RSAKey\"%>\n<%@ page language=\"java\" pageEncoding=\"UTF-8\"%>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<title>长理商城-欢迎登录</title>\n<script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/login.css\">\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n<script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/jquery.validate.min.js\"></script>\n\t<script src=\"${pageContext.request.contextPath}/js/login.js\"></script>\n</head>\n<%--<script>\n\n\t$(document).ready(function() {\n\n\t\t\n\t\t$(document).keypress(function(e) {\n\t\t\tif (e.which == 13) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\t$(\".login-input\").click();\n\t\t\t\t//form.submit();\n\t\t\t}\n\t\t});\n\t\tinput_value();\n\t})\n\t\n\tfunction input_value() {\n\t\tif (UserID != \"null\") {\n\t\t\tdocument.getElementById(\"inputEmail3\").value = UserID;\n\t\t}\n\t}\n</script>--%>\n\n<script type=\"text/javascript\">\n\tfunction reloadcode() {\n\t\tvar verify = document.getElementById('code');\n\t\tverify.setAttribute(\"src\", \"${pageContext.request.contextPath}/verificationcodeimg?it=\" + Math.random());\n\t}\n</script>\n\n\n<body onload=\"input_value()\">\n\t<div id=\"main\" class=\"container\">\n\t\t<div id=\"header\">\n\t\t\t<%@ include file=\"header.jsp\"%>\n\t\t</div>\n\t\t<div class=\"login\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"col-md-6\">\n\t\t\t\t\t<img src=\"./image/login.png\" alt=\"\" width=\"640\" height=\"400\" style=\"margin-left:-40px;margin-top:30px;\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-md-5 form-login\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<!-- <h2 class=\"login-h2\">登录</h2> -->\n\t\t\t\t\t\t<form class=\"form-horizontal\" id=\"form2\" action=\"${pageContext.request.contextPath}/loginconfirm\" method=\"post\">\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"username\" class=\"col-sm-2 control-label\">用户名</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"username\"\n\t\t\t\t\t\t\t\t\t\tname=\"username\" placeholder=\"用户名\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"password\" class=\"col-sm-2 control-label\">密码</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" id=\"password\"\n\t\t\t\t\t\t\t\t\t\tname=\"password\" placeholder=\"密码\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"confirmlogo\" class=\"col-sm-2 control-label\">验证码</label>\n\t\t\t\t\t\t\t\t<img src=\"${pageContext.request.contextPath}/verificationcodeimg\" id=\"code\" onclick=\"reloadcode()\"\n\t\t\t\t\t\t\t\t\tstyle=\"cursor: pointer;\" alt=\"看不清楚,换一张\" width=\"100px\">\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\" style=\"width: 160px\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"confirmlogo\"\n\t\t\t\t\t\t\t\t\t\tname=\"confirmlogo\" placeholder=\"验证码\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div style=\"margin-left:80px;color:red;\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<div class=\"col-sm-offset-2 col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"submit\" class=\"btn btn-primary login-input\" value=\"登录\"\n\t\t\t\t\t\t\t\t\t\tname=\"submit\">\n\t\t\t\t\t\t\t\t\t<a href=\"\" style=\"margin-left:10px;\">忘记密码?</a>\n\t\t\t\t\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t\t\t\t\t${errorMsg}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/main.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page language=\"java\" pageEncoding=\"UTF-8\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n\n    <script>\n\n    </script>\n    <style type=\"text/css\">\n        .button\n        {\n            clear:both;\n            margin:10px auto;\n            text-align:center;\n            font-size: 20px;\n            padding:10px 0;\n            line-height:25px;\n            color:#666;\n            border-top:#ddd 1px solid;\n        }\n        .button a\n        {\n            margin:0 7px;\n            color:#666;\n        }\n        .button a:hover\n        {\n            color:#000;\n            text-decoration:none;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n\n    <div id=\"header\">\n        <%@ include file=\"header.jsp\" %>\n\n        <!-- 旋转图 -->\n        <div class=\"header-bottom\">\n            <div class=\"sort\">\n                <div class=\"sort-channel\">\n                    <ul class=\"sort-channel-list list-group\">\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=数码\">数码</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手机\">手机</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手机壳\">手机壳</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\">充电器</a> <a href=\"\">电池</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=耳机\">耳机</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=相机\">相机</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=镜头\">镜头</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=单反\">单反</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=胶片\">胶片</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=摄像\">摄像</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=电脑\">电脑</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=显示屏\">显示屏</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=显卡\">显卡</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=硬盘\">硬盘</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=内存条\">内存条</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=影音\">影音</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=MP3\">MP3</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=音响\">音响</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=麦克风\">麦克风</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=收音机\">收音机</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=日用\">日用</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=护肤\">护肤</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=洗发水\">洗发水</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=沐浴露\">沐浴露</a> <a href=\"\">洗面奶</a> <a\n                                            href=\"\">洗手液</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=美妆\">美妆</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=面膜\">面膜</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=口红\">口红</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=防嗮\">防嗮</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=香水\">香水</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=家居\">家居</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=书架\">书架</a><a href=\"${pageContext.request.contextPath}/category?cate=鞋柜\">鞋柜</a>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=衣架\">衣架</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=台灯\">台灯</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=闲置书籍\">书籍</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=英语\">英语</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=四六级\">四六级</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\">商务英语</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=听力\">听力</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=计算机\">计算机</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=自动化\">自动化</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=金融\">金融</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=其他\">其他</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=体育\">体育</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=足球\">足球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=乒乓球\">乒乓球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=篮球\">篮球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=羽毛球\">羽毛球</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=经典\">经典</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=历史\">历史</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=名人\">名人</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=政治\">政治</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=小说\">小说</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=服饰\">服饰</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=女装\">女装</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=连衣裙\">连衣裙</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\"> 半身裙</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate= T恤\"> T恤 衬衫</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=卫衣\">卫衣</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=男装\">男装</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=外套\">外套</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=衬衫\">衬衫</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=夹克\">夹克</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=运动外套\">运动外套</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=鞋子\">鞋子</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=运动鞋\">运动鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=单鞋\">单鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=皮鞋\">皮鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=拖鞋\">拖鞋</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=箱包\">箱包</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=女包\">女包</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=男包\">男包</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=旅行箱\">旅行箱</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=装饰品\">装饰品</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=配饰\">配饰</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=腰带\">腰带</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=皮带\">皮带</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=帽子\">帽子</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=围巾\">围巾</a>\n                                        <a\n                                                href=\"${pageContext.request.contextPath}/category?cate=手套\">手套</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手表\">手表</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=机械表\">机械表</a><a\n                                            href=\"${pageContext.request.contextPath}/category?cate=石英表\">石英表</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电子表\">电子表</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=饰品\">饰品</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=眼镜\">眼镜</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=手链\">手链</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=项链\">项链</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=吊坠\">吊坠</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=收藏品\">收藏品</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=古玩\">古玩</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=邮票\">邮票</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=钱币\">钱币</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=陶瓷\">陶瓷</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=学习用品\">学习用品</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=编码\">编码</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=Java\">Java</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=PHP\">PHP</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=C\">C++</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=Python\">Python</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=培训\">培训</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=驾照\">驾照</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=计算机证书\">计算机证书</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=四六级\">四六级</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=线上课程\">线上课程</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=健身\">健身</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考证\">考证</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=学习\">学习</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=闲置百货\">百货</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=日用\">日用</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=雨伞\">雨伞</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=口罩\">口罩</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=拖布\">拖布</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电风扇\">电风扇</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=餐具\">餐具</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=餐盘\">餐盘</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=保温杯\">保温杯</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=饭盒\">饭盒</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=餐具套装\">餐具套装</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=出行\">出行</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=自行车\">自行车</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电动车\">电动车</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=滑板\">滑板</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                    </ul>\n                </div>\n                <!-- <div class=\"sort-detail\">\n                    <dl class=\"dl-horizontal\">\n                        <dt>手机</dt>\n                        <dd>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=手机壳\">手机壳</a>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=充电器\">充电器</a>\n                            <a href=\"\">电池</a>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=耳机\">耳机</a>\n                        </dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>相机</dt>\n                        <dd>\n                            <a href=\"\">镜头</a>\n                            <a href=\"\">单反</a>\n                            <a href=\"\">胶片</a>\n                            <a href=\"\">摄像</a>\n                        </dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>电脑</dt>\n                        <dd></dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>MP3</dt>\n                        <dd></dd>\n                    </dl>\n                </div> -->\n            </div>\n            <div id=\"mycarousel\" class=\"carousel slide\" data-ride=\"carousel\">\n                <div class=\"carousel-inner\">\n                    <div class=\"item active\">\n                        <img src=\"${pageContext.request.contextPath}/image/4.jpg\" alt=\"\">\n                    </div>\n\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/3.jpg\" alt=\"\">\n                    </div>\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/5.jpg\" alt=\"\">\n                    </div>\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/6.jpg\" alt=\"\">\n                    </div>\n                </div>\n\n                <ol class=\"carousel-indicators\">\n                    <li data-target=\"#mycarousel\" data-slide-to=\"0\" class=\"active\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"1\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"2\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"3\"></li>\n                </ol>\n\n                <a class=\"left carousel-control\" href=\"#mycarousel\" role=\"button\"\n                   data-slide=\"prev\" style=\"display: none;\"> <span\n                        class=\"glyphicon glyphicon-chevron-left\" aria-hidden=\"true\"></span>\n                    <span class=\"sr-only\">Previous</span>\n                </a> <a class=\"right carousel-control\" href=\"#mycarousel\" role=\"button\"\n                        data-slide=\"next\" style=\"display: none;\"> <span\n                    class=\"glyphicon glyphicon-chevron-right\" aria-hidden=\"true\"></span>\n                <span class=\"sr-only\">Next</span>\n            </a>\n            </div>\n            <div class=\"clear-float\"></div>\n        </div>\n    </div>\n    <div class=\"content\">\n\n        <c:if test=\"${!empty digGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>数码</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${digGoods}\" var=\"goods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"><img src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\" alt=\"\"\n                                                        width=\"200\" height=\"200\"/>\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${goods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${goods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${goods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!goods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${goods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty houseGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>家电</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${houseGoods}\" var=\"housegoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${housegoods.goodsid}\"> <img\n                                                src=\"${pageContext.request.contextPath}/pictures/${housegoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${housegoods.goodsid}\">${housegoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${housegoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${housegoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${housegoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!housegoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${housegoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty colGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>服饰</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${colGoods}\" var=\"colgoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${colgoods.goodsid}\"> <img\n                                                src=\"${pageContext.request.contextPath}/pictures/${colgoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${colgoods.goodsid}\">${colgoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${colgoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${colgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${colgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!colgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${colgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty bookGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>书籍</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${bookGoods}\" var=\"bookgoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${bookgoods.goodsid}\"> <img\n                                                src=\"${pageContext.request.contextPath}/pictures/${bookgoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${bookgoods.goodsid}\">${bookgoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${bookgoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${bookgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${bookgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!bookgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${bookgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n    </div>\n</div>\n<div class=\"button\">欢迎报考长沙理工大学</div>\n</body>\n</html>\n\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/orderConfirm.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/shopcart.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/order.css\">\n    <script src=\"${pageContext.request.contextPath}/js/order.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <jsp:include page=\"header.jsp\"/>\n</div>\n<div class=\"shopping_cart\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"account_heading account_heading_ah\">\n                    <h1 class=\"header-border\">确认订单</h1>\n                </div>\n            </div>\n        </div>\n\n        <%--确认收货地址--%>\n        <h4 class=\"header-border h4-mar\">确认收货地址<a href=\"${pageContext.request.contextPath}/info/address\" class=\"pull-right manage-a\">管理收货地址</a></h4>\n\n        <%--<form action=\"\" method=\"post\">--%>\n        <div class=\"address\">\n            <c:forEach items=\"${address}\" var=\"addItem\">\n                <div class=\"radio\">\n                    <label>\n                        <input type=\"radio\" name=\"addressid\" class=\"address-check\" value=\"${addItem.addressid}\"\n                               checked>\n                            ${addItem.province} ${addItem.city} ${addItem.county}  ${addItem.detailaddr}（${addItem.conname}收）${addItem.contel}\n                    </label>\n                </div>\n            </c:forEach>\n        </div>\n\n        <%--商品信息--%>\n        <h4 class=\"header-border h4-mar-2\">确认收货信息</h4>\n        <div class=\"row\">\n            <div class=\"all_wis_frm\">\n                <div class=\"col-md-12\">\n                    <div class=\"wishlist-content wishlist-content-2\">\n\n                        <div class=\"wishlist-table wishlist-table-2 table-responsive\">\n                            <table id=\"cart-table\">\n                                <thead>\n                                <tr>\n                                    <th class=\"product-thumbnail product-thumbnail-2\"></th>\n                                    <th class=\"product-name product-name_2\"><span\n                                            class=\"nobr\">商品</span></th>\n                                    <th class=\"product-price\"><span class=\"nobr\"> 价格\n\t\t\t\t\t\t\t\t\t\t\t\t</span></th>\n                                    <th class=\"product-stock-stauts\"><span class=\"nobr\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t数量 </span></th>\n                                    <th class=\"product-add-to-cart\"><span class=\"nobr\">总价</span></th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                <%--<c:set var=\"oldTotalPrice\" value=\"0\"/>--%>\n                                <c:forEach items=\"${goodsAndImage}\" var=\"goods\">\n                                    <tr>\n                                        <td class=\"product-thumbnail product-thumbnail-2\"><a\n                                                href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"><img\n                                                src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\"\n                                                alt=\"\"/></a></td>\n                                        <td class=\"product-name product-name_2\"><a\n                                                href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                        </td>\n                                        <td class=\"product-price\"><span\n                                                class=\"amount-list amount-list-2\">￥${goods.price}</span></td>\n                                        <td class=\"product-stock-status\">\n                                            <div class=\"latest_es_from_2\">\n                                                <span>${goods.num}</span>\n                                            </div>\n                                        </td>\n                                        <td class=\"product-price\"><span\n                                                class=\"amount-list amount-list-2\">￥${goods.newPrice}</span></td>\n                                        <%--<c:set value=\"${oldTotalPrice+goods.price*goods.num*goods.activity.discount}\" var=\"oldTotalPrice\"/>--%>\n                                    </tr>\n                                </c:forEach>\n\n                                </tbody>\n                                <%--<tfoot>\n                                <tr>\n                                    <td colspan=\"6\">\n                                        <div class=\"coupon\">\n                                            <!-- <label for=\"coupon_code\"></label>\n                                                <input id=\"coupon_code\" class=\"input-text\" type=\"text\" placeholder=\"Coupon code\" value=\"\" name=\"coupon_code\"> -->\n                                            <a\n                                                    class=\"button_act button_act_3 button_act_333 button_act_tp \"\n                                                    href=\"./shopcart.jsp\">更新购物车</a>\n                                            <!-- <a class=\"button_act btn-tip \" href=\"#\">Update cart</a> -->\n                                        </div>\n                                    </td>\n                                </tr>\n                                </tfoot>--%>\n                            </table>\n                        </div>\n                        <div class=\"row\">\n                            <div class=\"col-md-5 col-xs-12 form-group form-group-lg\">\n                                <label class=\"col-sm-2 control-label\" for=\"pay-select\">选择支付方式</label>\n                                <div class=\"col-sm-10\">\n                                    <select class=\"form-control\" id=\"pay-select\">\n                                        <option value=\"1\">在线支付</option>\n                                        <option value=\"0\">货到付款</option>\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"col-md-6 col-md-offset-1 col-xs-12\">\n                                <div class=\"cart_totals\">\n                                    <h2>总价</h2>\n                                    <table class=\"shop_table shop_table_responsive\">\n                                        <tbody>\n                                        <tr class=\"cart-subtotal\">\n                                            <th>总额</th>\n                                            <td data-title=\"Subtotal\"><span\n                                                    class=\"woocommerce-Price-amount amount\">￥<span\n                                                    class=\"woocommerce-Price-currencySymbol\"\n                                                    id=\"total-old\">${oldTotalPrice}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span></td>\n                                        </tr>\n                                        <tr class=\"order-total\">\n                                            <th>实付款</th>\n                                            <td data-title=\"Total\"><strong> <span\n                                                    class=\"woocommerce-Price-amount amount\">￥<span\n                                                    class=\"woocommerce-Price-currencySymbol\"\n                                                    id=\"total-new\">${totalPrice}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n                                            </strong></td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <div class=\"wc-proceed-to-checkout\">\n                                        <%--<input type=\"submit\" class=\"button_act button_act-tc confirm-orders\" value=\"结算\"/>--%>\n                                        <button id=\"confirm-orders\"\n                                                class=\"button_act button_act-tc confirm-orders pull-right\">结算\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <%--</form>--%>\n\n    </div>\n</div>\n<div id=\"path\" hidden>${pageContext.request.contextPath}</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/register.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@page import=\"java.security.interfaces.RSAKey\"%>\n<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<%request.setCharacterEncoding(\"utf-8\");%>\n<%@ page import=\"java.sql.*\"%>\n<%@ page import=\"java.text.*\"%>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-个人注册</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/login.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.validate.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/validate.js\"></script>\n</head>\n\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <%@ include file=\"header.jsp\"%>\n    </div>\n    <div class=\"login\">\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <img src=\"${pageContext.request.contextPath}/image/register.png\" width=\"450\" height=\"600\" alt=\"\" style=\"margin-left: 40px;\">\n            </div>\n            <div class=\"col-md-5 form-register\">\n                <div>\n                    <!-- <h2 class=\"login-h2\">登录</h2> -->\n                    <form class=\"form-horizontal\" id=\"form\" action=\"${pageContext.request.contextPath}/registerresult\"\n                          method=\"post\">\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputName\" class=\"col-sm-2 control-label\">昵称</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"username\"\n                                       name=\"username\" placeholder=\"昵称\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputPassword\" class=\"col-sm-2 control-label\">密码</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"password\" class=\"form-control\" id=\"password\"\n                                       name=\"password\" placeholder=\"密码\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"confirmPassword\" class=\"col-sm-2 control-label\">确认密码</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"password\" class=\"form-control\"\n                                       id=\"confirmPassword\" name=\"confirmPassword\" placeholder=\"确认密码\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputTel\" class=\"col-sm-2 control-label\">联系方式</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"email\"\n                                       name=\"email\" placeholder=\"邮箱\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputTel\" class=\"col-sm-2 control-label\">联系方式</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"telephone\"\n                                       name=\"telephone\" placeholder=\"联系方式\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-10\">\n                                <input type=\"hidden\" name=\"flag\" id=\"flag\" value=\"1\"> <input\n                                    type=\"submit\" class=\"btn btn-primary form-control\" value=\"注册\">\n                                <div class=\"error\">\n                                    ${errorMsg}\n                                </div>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/search.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-搜索${keyword}</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <style>\n        .like-button {\n            left: 80% !important;\n            top: 70% !important;\n        }\n        .data>ul {\n            padding: 0;\n        }\n        .page-div {\n            margin-top: 10px;\n        }\n        .page-info {\n            padding: 35px 35px 35px 55px;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"content\">\n        <div class=\"module\">\n            <div class=\"\">\n                <h3>\n                    搜索结果><span style=\"color: red;\">${keyword}</span>\n                </h3>\n                <hr>\n            </div>\n\n            <div class=\"bd\">\n                <div class=\"data\">\n                    <ul>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                            <li class=\"data-item-li\">\n                                <div class=\"to-big\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\" width=\"260px\" height=\"260px\" alt=\"\"/>\n                                    </a>\n                                </div>\n                                <p class=\"text-right\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                </p>\n                                <div class=\"text-right\">\n                                    <b>￥${goods.price}</b>\n                                </div>\n                                <div>\n                                    <c:if test=\"${goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <c:if test=\"${!goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                </div>\n                            </li>\n                        </c:forEach>\n\n                        <div class=\"clear-float\" style=\"clear: both;\"></div>\n                    </ul>\n                </div>\n                <div class=\"row page-div\">\n                    <div class=\"col-md-5 page-info\">\n                        当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                    </div>\n                    <div class=\"col-md-6\">\n                        <nav aria-label=\"Page navigation\">\n                            <ul class=\"pagination pagination-lg\">\n\n                                <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                    <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                        <li class=\"active\"><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                    <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                        <li><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                </c:forEach>\n\n                                <c:if test=\"${pageInfo.hasNextPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasNextPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                            </ul>\n                        </nav>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/shopcart.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-购物车</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/shopcart.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/shopcart.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <!-- \t<script>\n            $(document).ready(function(){\n                $(\".list-group-item\").hover(function(){\n                    $(this).children(\"div.sort-detail\").show();\n                },function(){\n                    $(this).children(\"div.sort-detail\").hide();\n                });\n            })\n        </script> -->\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <jsp:include page=\"header.jsp\"/>\n</div>\n<div class=\"shopping_cart\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"account_heading account_heading_ah\">\n                    <h1>购物车</h1>\n                </div>\n            </div>\n        </div>\n        <div class=\"row\">\n            <div class=\"all_wis_frm\">\n                <div class=\"col-md-12\">\n                    <div class=\"wishlist-content wishlist-content-2\">\n                        <form action=\"#\">\n                            <div class=\"wishlist-table wishlist-table-2 table-responsive\">\n                                <table id=\"cart-table\">\n                                    <thead>\n                                    <tr>\n                                        <th class=\"product-remove\"><span class=\"nobr\"></span></th>\n                                        <th class=\"product-thumbnail product-thumbnail-2\"></th>\n                                        <th class=\"product-name product-name_2\"><span\n                                                class=\"nobr\">商品</span></th>\n                                        <th class=\"product-price\"><span class=\"nobr\"> 价格\n\t\t\t\t\t\t\t\t\t\t\t\t</span></th>\n                                        <th class=\"product-stock-stauts\"><span class=\"nobr\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t数量 </span></th>\n                                        <th class=\"product-add-to-cart\"><span class=\"nobr\">总价</span></th>\n                                    </tr>\n                                    </thead>\n                                    <tbody>\n\n\n\n\n                                    </tbody>\n                                    <%--<tfoot>\n                                    <tr>\n                                        <td colspan=\"6\">\n                                            <div class=\"coupon\">\n                                                <!-- <label for=\"coupon_code\"></label>\n                                                    <input id=\"coupon_code\" class=\"input-text\" type=\"text\" placeholder=\"Coupon code\" value=\"\" name=\"coupon_code\"> -->\n                                                <a\n                                                        class=\"button_act button_act_3 button_act_333 button_act_tp \"\n                                                        href=\"./shopcart.jsp\">更新购物车</a>\n                                                <!-- <a class=\"button_act btn-tip \" href=\"#\">Update cart</a> -->\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    </tfoot>--%>\n                                </table>\n                            </div>\n                        </form>\n                        <div class=\"row\">\n                            <div class=\"col-md-6 col-xs-12\">\n                                <div class=\"cart_totals \">\n                                    <h2>总价</h2>\n                                    <table class=\"shop_table shop_table_responsive\">\n                                        <tbody>\n                                        <tr class=\"cart-subtotal\">\n                                            <th>小计</th>\n                                            <td data-title=\"Subtotal\"><span\n                                                    class=\"woocommerce-Price-amount amount\"> <span\n                                                    class=\"woocommerce-Price-currencySymbol\" id=\"total-num\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span></td>\n                                        </tr>\n                                        <tr class=\"order-total\">\n                                            <th>总额</th>\n                                            <td data-title=\"Total\"><strong> <span\n                                                    class=\"woocommerce-Price-amount amount\"> <span\n                                                    class=\"woocommerce-Price-currencySymbol\" id=\"total-price\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n                                            </strong></td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <div class=\"wc-proceed-to-checkout\">\n                                        <a class=\"button_act button_act-tc confirm-orders\" href=\"${pageContext.request.contextPath}/order\">确认订单</a>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"col-md-6 col-xs-12\"></div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" hidden>${pageContext.request.contextPath}</div>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/sidebar.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-sidebar\">\n    <header class=\"templatemo-site-header\">\n        <div class=\"square\"></div>\n        <h1>后台管理</h1>\n    </header>\n    <div class=\"mobile-menu-icon\">\n        <i class=\"fa fa-bars\"></i>\n    </div>\n    <nav class=\"templatemo-left-nav\">\n        <ul>\n            <li><a href=\"${pageContext.request.contextPath}/admin/user/show\"><i class=\"fa fa-user fa-fw\"></i>用户管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show\"><i class=\"fa fa-bar-chart fa-fw\"></i>商品管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/order/send\"><i class=\"fa fa-users fa-fw\"></i>订单管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\"><i class=\"fa fa-database fa-fw\"></i>活动管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/logout\"><i class=\"fa fa-eject fa-fw\"></i>退出系统</a></li>\n        </ul>\n    </nav>\n</div>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/userManage.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <%--swal弹框--%>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"\" class=\"active\">所有用户</a></li>\n                        <%--<li><a href=\"\">Dashboard</a></li>\n                        <li><a href=\"\">Overview</a></li>\n                        <li><a href=\"login.html\">Sign in form</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">Email<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系电话<span class=\"caret\"></span></a></td>\n                            <td>删除</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- JS -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>      <!-- jQuery -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.min.js\"></script> <!--  jQuery Migrate Plugin -->\n<script src=\"https://www.google.com/jsapi\"></script> <!-- Google Chart -->\n<script>\n    /* Google Chart\n     -------------------------------------------------------------------*/\n    // Load the Visualization API and the piechart package.\n    google.load('visualization', '1.0', {'packages':['corechart']});\n\n    // Set a callback to run when the Google Visualization API is loaded.\n    google.setOnLoadCallback(drawChart);\n\n    // Callback that creates and populates a data table,\n    // instantiates the pie chart, passes in the data and\n    // draws it.\n    function drawChart() {\n\n        // Create the data table.\n        var data = new google.visualization.DataTable();\n        data.addColumn('string', 'Topping');\n        data.addColumn('number', 'Slices');\n        data.addRows([\n            ['Mushrooms', 3],\n            ['Onions', 1],\n            ['Olives', 1],\n            ['Zucchini', 1],\n            ['Pepperoni', 2]\n        ]);\n\n        // Set chart options\n        var options = {'title':'How Much Pizza I Ate Last Night'};\n\n        // Instantiate and draw our chart, passing in some options.\n        var pieChart = new google.visualization.PieChart(document.getElementById('pie_chart_div'));\n        pieChart.draw(data, options);\n\n        var barChart = new google.visualization.BarChart(document.getElementById('bar_chart_div'));\n        barChart.draw(data, options);\n    }\n\n    $(document).ready(function(){\n        if($.browser.mozilla) {\n            //refresh page on browser resize\n            // http://www.sitepoint.com/jquery-refresh-page-browser-resize/\n            $(window).bind('resize', function(e)\n            {\n                if (window.RT) clearTimeout(window.RT);\n                window.RT = setTimeout(function()\n                {\n                    this.location.reload(false); /* false to get page from cache */\n                }, 200);\n            });\n        } else {\n            $(window).resize(function(){\n                drawChart();\n            });\n        }\n    });\n\n</script>\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>      <!-- Templatemo Script -->\n<script src=\"${pageContext.request.contextPath}/js/userManage.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/WEB-INF/views/verificationcodeimg.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: zhangxin\n  Date: 2019/5/13\n  Time: 15:45\n--%>\n<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<%--<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>--%>\n<%@page import=\"com.zhang.ssmschoolshop.util.verificate.Verificate\" %>\n<%--<%\n    String path = request.getContextPath();\n    String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\";\n%>--%>\n<%@page contentType=\"image/jpeg\"%>\n<jsp:useBean id=\"image\" scope=\"page\" class=\"com.zhang.ssmschoolshop.util.verificate.Verificate\" />\n<%\n    String str = image.getCertPic(0, 0, response.getOutputStream());\n    // 将认证码存入SESSION\n    session.setAttribute(\"certCode\", str);\n    out.clear();\n    out = pageContext.pushBody();\n%>\n\n<html>\n<head>\n    <title>Title</title>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/bootstrap/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/bootstrap/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/bootstrap/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/chat.css",
    "content": ".chat-div {\n\twidth: 100%;\n\tmargin: 40px auto 0px auto;\n}\n\n.chat {\n\t/*margin: 30px;*/\n\twidth: 73%;\n\tdisplay: inline-block;\n\t/*margin-top: 0;*/\n\tmargin-left: 0%;\n\tposition: relative;\n\ttop: -45px;\n}\n\n.chat-content {\n\tpadding: 20px;\n\tbackground: #F8F8F8;\n\twidth: 100%;\n\theight: 500px;\n\toverflow-x: hidden;\n\toverflow-y: auto;\n}\n\n.chat-message {\n\tmargin-top: 8px;\n\tmargin-bottom: 8px;\n}\n\n.message-icon-left {\n\tposition: absolute;\n\tright: auto;\n\tleft: -21px;\n\tcolor: #FFF;\n}\n\n.message-icon-right {\n\tposition: absolute;\n\t/*left: 5px;*/\n\tright: -280px;\n\tcolor: #DDD;\n}\n\n.info-content {\n\tdisplay: inline-block !important;\n\tdisplay: inline;\n\twidth: auto;\n}\n\n.chat-message-content1 {\n\tposition: relative;\n\tfloat: left;\n\tbackground: #FFFFFF;\n\tmargin-right: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #DDD;\n\tborder-radius: 4px;\n}\n\n\n.chat-message-content2 {\n\tposition: relative;\n\tfloat: right;\n\tbackground: #34BBF9;\n\tmargin-left: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #34BBF9;\n\tborder-radius: 4px;\n}\n\n/*.form-group {\n\twidth: 100%;\n\theight: 100%;\n}*/\n\n.form-div {\n\t/*padding: 1%;*/\n}\n\n.input-div {\n\twidth: 86%;\n\tmargin: 2% 0.8% 2% 0.9%;\n}\n\n.send-div {\n\twidth: 11%;\n\theight: 53px;\n\tmargin-top: 2%;\n}\n\n#input-message {\n\twidth: 100%;\n}\n\n.send-div>input {\n\theight: 100%;\n}\n\n.chat-list {\n\twidth: 20%;\n\theight: 565px;\n\tdisplay: inline-block;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tmargin-left: 2%;\n\tposition: relative;\n\ttop: -15px;\n\t/*background: #EBEBEC;*/\n\n}\n\n.list-item {\n\theight: 66px;\n\tborder-right: 1px solid gray;\n\tbackground: #FAF7F4;\n\tpadding-top: 4px;\n\tpadding-left: 45px;\n\t/*font-size: 20px;*/\n}\n\n.list-item {\n\tdisplay: none;\n}\n\n#user-no {\n\tdisplay: none;\n}\n\n.a-card {\n    text-decoration: none !important;\n    display: block;\n    border: 1px solid #DDD;\n    margin: 0;\n    color: black;\n}\n\n.card {\n    height: 60px;\n    text-align: center;\n    padding-top: 25px;\n}\n\n.a-card:hover {\n    transition:transform .8s cubic-bezier(0.23, 1, 0.32, 1), box-shadow .8s cubic-bezier(0.23, 1, 0.32, 1);\n    box-shadow:0 0 20px rgba(0, 0, 0, 0.3);\n    transform:scale(1.01);\n    background-color: #F8F8F8;\n    z-index:2;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/chatrobot.css",
    "content": ".clear-float {\n\tclear: both;\n}\n\n#input-message {\n\t/*font-size: 30px;*/\n}\n\n.chat-div {\n\twidth: 100%;\n\tmargin: 0 auto;\n}\n\n.chat {\n\t/*margin: 30px;*/\n\twidth: 100%;\n\tdisplay: inline-block;\n\t/*margin-top: 0;*/\n\tmargin-left: 0%;\n\tposition: relative;\n\t/*top: -45px;*/\n}\n\n.chat-content {\n\tpadding: 20px;\n\tbackground: #F8F8F8;\n\twidth: 100%;\n\theight: 565px;\n\toverflow-x: hidden;\n\toverflow-y: auto;\n}\n\n.chat-message {\n\tmargin-top: 8px;\n\tmargin-bottom: 8px;\n}\n\n.message-icon-left {\n\tposition: absolute;\n\tright: auto;\n\tleft: -21px;\n\tcolor: #FFF;\n}\n\n.message-icon-right {\n\tposition: absolute;\n\t/*left: 5px;*/\n\tright: -280px;\n\tcolor: #DDD;\n}\n\n.info-content {\n\tdisplay: inline-block !important;\n\tdisplay: inline;\n\twidth: auto;\n}\n\n.chat-message-content1 {\n\tposition: relative;\n\tfloat: left;\n\tbackground: #FFFFFF;\n\tmargin-right: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #DDD;\n\tborder-radius: 4px;\n}\n\n\n.chat-message-content2 {\n\tposition: relative;\n\tfloat: right;\n\tbackground: #34BBF9;\n\tmargin-left: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #34BBF9;\n\tborder-radius: 4px;\n}\n\n/*.form-group {\n\twidth: 100%;\n\theight: 100%;\n}*/\n\n.form-div {\n\t/*padding: 1%;*/\n}\n\n.input-div {\n\twidth: 86%;\n\tmargin: 2% 0.8% 2% 0.9%;\n}\n\n.send-div {\n\twidth: 11%;\n\theight: 53px;\n\tmargin-top: 2%;\n}\n\n#input-message {\n\twidth: 100%;\n}\n\n.send-div>input {\n\theight: 100%;\n}\n\n.chat-list {\n\twidth: 20%;\n\theight: 625px;\n\tdisplay: inline-block;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tmargin-left: 2%;\n\tposition: relative;\n\ttop: 43px;\n\t/*background: #EBEBEC;*/\n\n}\n\n.list-item {\n\theight: 66px;\n\tborder-right: 1px solid gray;\n\tbackground: #FAF7F4;\n\tpadding-top: 4px;\n\tpadding-left: 45px;\n\t/*font-size: 20px;*/\n}\n\n::-webkit-scrollbar {\n    height: 10px;\n    width: 7px;\n    background: rgba(0,0,0,.1);\n}\n\n::-webkit-scrollbar-thumb {\n    background: rgba(8, 174, 237, 0.3);\n    border-radius: 6px;\n}\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/favorite.css",
    "content": "/**{\n    margin:0px;\n    padding:0px;\n}\n*/\nbody{\n    background:#e5e6d0;\n}\n\n.favorite {\n    margin-top: 2%;\n}\n\n.favorite-side {\n    margin-top: 2%;\n    width: 30%;\n}\n\n.fav-menu {\n    margin-top: 5%;\n}\n\n.fav-menu,#banner,#main-fav,#footer{\n    /*margin-top:1%;*/\n    /*width:1140px;*/\n}\n\n.caret-right {\n    position: absolute;\n    top: 22px;\n    left: 210px;\n}\n\n/* 万能的清除*/\n.clear{\n    clear:both;\n}\n.fav-menu{\n    padding-top:1px;\n}\n.fav-menu ul{\n    list-style:none;\n    /*padding-left: 15px;*/\n}\n.fav-menu>ul{\n    /*list-style:none;*/\n    padding-left: 15px;\n}\n\n.top-li {\n    border-top: 1px solid #FFFFFF;\n}\n\n.fav-menu ul li{\n    /*float:left;*/\n    margin:1px;\n    width: 230px;\n    border-bottom: 1px solid #FFFFFF;\n    border-right: 1px solid #FFFFFF;\n    /*border-left: 1px solid #FFFFFF;*/\n    position: relative;\n}\n\n.fav-menu ul li a{\n    color:#996699;\n   \n    font-family:Vivaldi;\n    text-align:center;\n    display:block;\n    width:120px;\n    height:50px;\n    line-height:46px;\n    font-size:25px;\n    margin-left: 22px;\n    text-decoration: none;\n}\n.fav-menu ul li a:hover{\n    background:#ffcccc;\n}\n.fav-menu ul li ul{\n    display:none;\n    width:120px;\n    position:absolute;\n    z-index: 10;\n    left: 100%;\n    top: 0%;\n    background:#ffcccc;\n}\n.fav-menu ul li:hover ul{\n    display:block;\n}\n.fav-menu ul li ul li{\n    width:120px;\n    position: relative;\n    right: 40px;\n}\n.fav-menu ul li ul li a{\n    width:120px;\n    padding-left: 0px;\n    margin-left: 0px;\n}\n.fav-menu ul li ul li a:hover{\n    background:#ff9999;\n}\n\n#main-fav{\n    padding:10px 10px;\n}\n/*#main-fav .container{\n    width:900px;\n    float:left;\n}\n*/#main-fav .product{\n    float:left;\n    padding-left:10px;\n    list-style:none;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/information.css",
    "content": ".ui-menu {\n\tposition: relative;\n\tz-index: 19;\n}\n\n.ui-menu li a {\n\tborder-bottom: 2px solid rgb(241, 241, 229);\n\tcolor: #2894FF;\n\twidth: 100%;\n}\n\n.ui-menu li a:hover, .ui-menu li.cur a {\n\tborder-bottom: 2px solid #2894FF;\n\tcolor: #2894FF;\n}\n\n.ui-menu a {\n\theight: 37px;\n\tline-height: 37px;\n\tfont-size: 16px;\n\tdisplay: inline-block;\n\ttext-align: center;\n\ttext-decoration: none;\n}\n\n.nav-tabs {\n\tborder-bottom: 1px solid #2894FF;\n}\n\n.well {\n\tbackground-color: #fff;\n\tborder-radius: 5px;\n\tborder: solid 1px #e5e6e6;\n\tbox-shadow: 0px 3px 5px #d2d6da;\n  /*box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);*/\n\tposition: relative\n}\n\n.well_condition {\n\tbackground-color: #fff;\n\tborder: solid 1px #e5e6e6;\n\tbox-shadow: 0px 3px 5px #d2d6da;\n\tborder-radius: 5px;\n}\n\n.bs-docs-example {\n\tdisplay: inline-block;\n\twidth: 500px;\n\tposition: relative;\n\tmargin: 15px 10px;\n\t\n\tpadding: 39px 19px 14px;\n\tbackground-color: #fff;\n\tborder: 1px solid #ddd;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n}\n\n.grid {\n\twidth: 100%;\n}\n\n.clear-border {\n\tborder: 0px !important;\n}\n\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #fa7c63;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n  text-decoration: none !important;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n.section-padding {\n  padding-bottom: 50px;\n}\n.section-title {\n  margin-bottom: 35px;\n}\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n::selection {\n   background: #b3d4fc;\n   text-shadow: none;\n}\n.browserupgrade {\n  margin: 0.2em 0;\n  background: #ccc;\n  color: #000;\n  padding: 0.2em 0;\n}\n\n/*----------------------------------------*/\n/*  23. Shopping cart area\n/*----------------------------------------*/\n.dm_content_2 {\n  margin-top: 36px;\n}\n.new_act_4{\n  margin-top: 20px;\n  margin-left: -15px\n}\n.cramb_area_4{\n  margin-left: -19px;\n}\n.button_act.button_act_3.button_act_333 {\n  margin-left: 94px;\n  margin-top: 2px;    \n}\n.wishlist-table-2 table th, .wishlist-table-2 table td {\n  font-family: Open Sans,sans-serif;\n  font-size: 12px;\n  font-weight: 700;\n  padding: 16px 28px;\n  text-align: left;\n  text-transform: uppercase;\n}\n.wishlist-table-2 table .product-thumbnail-2 {\n  width: 195px;\n}\n.product-thumbnail.product-thumbnail-2 img {\n  /* margin-left: 22px; */\n}\n.latest_es_from_2 > input[type=\"number\"] {\n  background: #ffffff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  font-weight: normal;\n  height: 40px;\n  padding: 0 10px;\n  transition: all 0.3s ease 0s;\n  width: 52px;\n  margin-left: 18px;    \n}\n.amount-list.amount-list-2 {\n  margin-left: 19px;\n}\n.coupon .input-text {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  height: 40px;\n  line-height: 40px;\n  width: 150px !important;\n  border: 1px solid #d3ced2;\n  box-sizing: border-box;\n  float: left;\n  line-height: 1;\n  margin: 0 4px 0 0;\n  outline: 0 none;\n  padding: 6px 11px 5px;\n  font-weight: normal;\n  border-radius: 3px;    \n}\n.product-remove.product-remove_2 > a {\n  margin-left: -34px;\n  padding: 0px 45px;\n}\n.button_act.button_act_3.button_act_333.button_act_tp{\n  margin-left: 83% !important;\n  margin-top: 0;\n}\n.button_act.btn-tip {\n  margin-left: 672px;\n}\n.button_act.btn-tip:hover{\n  background-color: #ebe9eb;\n  color: inherit;    \n}\n.cart_totals {\n  margin: 30px 0 0;\n}\n.cart_totals h2 {\n  font-size: 20px;\n  margin: 0 0 30px;\n  text-transform: uppercase;\n}\n.shop_table td {\n  border-top: 0 none;\n  padding: 20px 28px;\n}\n.cart_totals .cart-subtotal .amount, .cart_totals .order-total .amount {\n  font-size: 16px;\n  font-weight: bold;\n}\n.shop_table {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-collapse: separate;\n  border-radius: 5px;\n  margin: 0 -1px 34px 0;\n  text-align: left;\n  width: 100%;\n}\n.shop_table th {\n  font-weight: 700;\n  padding: 9px 12px;\n}\n.button_act.button_act-tc {\n  margin-bottom: 50px;\n}\n.coupon {\n  margin-bottom: 10px;\n  margin-top: 7px;\n}\n.account_heading.account_heading_ah {\n  margin: -6px 0;\n}\n\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0; \n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n\n.wishlist-table table {\n  background: #fff none repeat scroll 0 0;\n  border-color: #e8e8e9;\n  border-radius: 0;\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n  margin: 20px 0 33px;\n  width: 100%;\n}\n.wishlist-table table{}\n.wishlist-table table th {\n  font-weight: 600;\n}\n.wishlist-table table th, .wishlist-table table td {\n  border-bottom: 1px solid #e7e7e7;\n  border-right: 1px solid #e7e7e7;\n  font-size: 14px;\n  font-weight: 500;\n  padding: 15px 12px;\n  text-align: left;\n  text-transform: uppercase;\n  font-family: Open Sans,sans-serif;  \n}\n.wishlist-table table .product-remove {\n  padding: 20px 28px;\n  width: 20px;\n}\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n.wishlist-table table .product-thumbnail {\n  width: 100px;\n}\n.wishlist-table table td.product-price .amount {\n  font-weight: 700;\n}\n.wishlist-table table .wishlist-in-stock {\n  color: #297e29;\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 55px;\n  text-transform: capitalize;\n}\n/* \n.nav>li>a {\n\ttext-shadow: none !important;\n  padding: 0px !important;\n} */\n\n.form-control {\n  height: 32px;\n}\n\n.dropdown .caret {\n    margin-top: 0px !important;\n    margin-left: 2px;\n}\n\n.well {\n\twidth: 1090px !important;\n}\n\n.bs-docs-example {\n\twidth: \n}\n\n.part {\n\tmargin-left: 20px;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/infostyle.css",
    "content": "/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml, body {\n  font-family: 'Roboto', 'Helvetica', sans-serif;\n}\n.demo-avatar {\n  width: 48px;\n  height: 48px;\n  border-radius: 24px;\n}\n.demo-layout .mdl-layout__header .mdl-layout__drawer-button {\n  color: rgba(0, 0, 0, 0.54);\n}\n.mdl-layout__drawer .avatar {\n  margin-bottom: 16px;\n}\n.demo-drawer {\n  border: none;\n}\n/* iOS Safari specific workaround */\n.demo-drawer .mdl-menu__container {\n  z-index: -1;\n}\n.demo-drawer .demo-navigation {\n  z-index: -2;\n}\n/* END iOS Safari specific workaround */\n.demo-drawer .mdl-menu .mdl-menu__item {\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.demo-drawer-header {\n  box-sizing: border-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-justify-content: flex-end;\n      -ms-flex-pack: end;\n          justify-content: flex-end;\n  padding: 16px;\n  height: 151px;\n}\n.demo-avatar-dropdown {\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n  -webkit-flex-direction: row;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  width: 100%;\n}\n\n.demo-navigation {\n  -webkit-flex-grow: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n.demo-layout .demo-navigation .mdl-navigation__link {\n  display: -webkit-flex !important;\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -webkit-flex-direction: row;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  color: rgba(255, 255, 255, 0.56);\n  font-weight: 500;\n}\n.demo-layout .demo-navigation .mdl-navigation__link:hover {\n  background-color: #00BCD4;\n  color: #37474F;\n}\n.demo-navigation .mdl-navigation__link .material-icons {\n  font-size: 24px;\n  color: rgba(255, 255, 255, 0.56);\n  margin-right: 32px;\n}\n\n.demo-content {\n  max-width: 1080px;\n}\n\n.demo-charts {\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.demo-chart:nth-child(1) {\n  color: #ACEC00;\n}\n.demo-chart:nth-child(2) {\n  color: #00BBD6;\n}\n.demo-chart:nth-child(3) {\n  color: #BA65C9;\n}\n.demo-chart:nth-child(4) {\n  color: #EF3C79;\n}\n.demo-graphs {\n  padding: 16px 32px;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-align-items: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n}\n/* TODO: Find a proper solution to have the graphs\n * not float around outside their container in IE10/11.\n * Using a browserhacks.com solution for now.\n */\n_:-ms-input-placeholder, :root .demo-graphs {\n  min-height: 664px;\n}\n_:-ms-input-placeholder, :root .demo-graph {\n  max-height: 300px;\n}\n/* TODO end */\n.demo-graph:nth-child(1) {\n  color: #00b9d8;\n}\n.demo-graph:nth-child(2) {\n  color: #d9006e;\n}\n\n.demo-cards {\n  -webkit-align-items: flex-start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -webkit-align-content: flex-start;\n      -ms-flex-line-pack: start;\n          align-content: flex-start;\n}\n.demo-cards .demo-separator {\n  height: 32px;\n}\n.demo-cards .mdl-card__title.mdl-card__title {\n  color: white;\n  font-size: 24px;\n  font-weight: 400;\n}\n.demo-cards ul {\n  padding: 0;\n}\n.demo-cards h3 {\n  font-size: 1em;\n}\n.demo-updates .mdl-card__title {\n  min-height: 200px;\n  background-image: url('images/dog.png');\n  background-position: 90% 100%;\n  background-repeat: no-repeat;\n}\n.demo-cards .mdl-card__actions a {\n  color: #00BCD4;\n  text-decoration: none;\n}\n\n.demo-options h3 {\n  margin: 0;\n}\n.demo-options .mdl-checkbox__box-outline {\n  border-color: rgba(255, 255, 255, 0.89);\n}\n.demo-options ul {\n  margin: 0;\n  list-style-type: none;\n}\n.demo-options li {\n  margin: 4px 0;\n}\n.demo-options .material-icons {\n  color: rgba(255, 255, 255, 0.89);\n}\n.demo-options .mdl-card__actions {\n  height: 64px;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  box-sizing: border-box;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/login.css",
    "content": ".form-login {\n\tmargin-top: 15%;\n\t/* background-image: url(../image/tao.jpg); */\n}\n\nbody {\n\t/* background-image: url(../image/tao.jpg); */\n}\n\n.login-h2 {\n\tmargin-left: 25px;\n}\n\n.form-register {\n\tmargin-top: 6%;\n}\n\n.error {\n\tcolor: red;\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/main.css",
    "content": "/*li {\n\tdisplay: inline-block;\n\tlist-style: none;\n\tmargin-right: 7px;\n}*/\n \n#header {\n\tmargin-top: 8px;\n\t/*background: #F5F5F5;*/\n}\n#header-bottom {\n\t\n}\n#header-nav-middle {\n\tbackground-color: #222;\n\tborder-color: #080808;\n\n}\n\n#bs-example-navbar-collapse-1 {\n\tmargin-left: 150px;\n}\n\n.header-bottom {\n\theight: auto;\n}\n\n.clear-float {\n\tclear: both;\n}\n\n#mycarousel {\n\twidth: 80%;\n\tfloat: left;\n\tmargin-left: 1%;\n/*\tdisplay: inline;\n\toverflow: hidden;\n\tposition: relative;*/\n}\n\n.sort {\n\twidth: 19%;\n\theight: auto;\n\tfloat: left;\n\t/*position: relative;*/\n\t/*margin-right: 5%;*/\n}\n\n.sort-channel {\n\n}\n\n.sort-detail {\n\t/*float: left;*/\n\tposition: absolute;\n\tz-index: 10;\n\ttop: 0px;\n\t/*left: 218px;*/\n\tleft: 102%;\n\tbackground: white;\n\twidth: 300px;\n\tdisplay: none;\n\t/*float: left;*/\n\tpadding: 5px;\n\tborder:1px solid gray;\n\n\tborder-radius: 3px;\n\n}\n\n.sort-channel-list>li {\n\tlist-style: none;\n\tpadding: 10px 30px;\n}\n\n.list-group-item>a{\n\tcolor: black;\n\ttext-decoration: none;\n}\n\n/*.dl-horizontal dt {\n\ttext-align: left !important;\n\twidth: auto !important;\n}\n\n.dl-horizontal dd {\n\ttext-align: left !important;\n\twidth: auto !important;\n\tmargin-left: 0;\n}*/\n\n.dl-hor {\n\t/*border-top: none;*/\n\tfloat: left;\n\tclear: both;\n\tmargin: 10px 10px 10px 5px;\n}\n\n.dl-hor>dt {\n\tfloat: left;\n\tmargin-right: 18px;\n}\n\n.dl-hor>dd {\n\tfloat: left;\n}\n\n.dl-hor>dd>a {\n\tmargin-right: 8px;\n}\n\n.dl-hor>dt>a {\n\tcolor: red;\n}\n\n.hd>h2 {\n\tborder-left: 3px solid black;\n\tpadding-left: 10px;\n}\n\n.data>ul {\n\tpadding: 0 15px;\n\tmargin-bottom: 0 !important;\n}\n\n.data>ul>li {\n\tlist-style: none;\n\tfloat: left;\n\tmargin: 2px 9px;\n\tposition: relative;\n}\n\n.hd>hr {\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n}\n\n.content {\n\tmargin: 23px 8px;\n}\n\n.module {\n\tborder-bottom: 1px solid #EEE;\n\tmargin-top: 6px;\n}\n\np.text-right {\n\tmargin-right: 5px;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tfont-size: 20px;\n}\n\np.text-right>a {\n\tcolor: black;\n\ttext-decoration: none;\n}\n\np.text-right>a:hover {\n\tcolor: orange;\n}\n\ndiv.text-right {\n\tmargin-right: 5px;\n}\n\n.text-right>b {\n\tcolor: #f40;\n\tfont-size: 15px;\n}\n\n.like-button {\n\tfont-size: 15px !important;\n\tposition: absolute !important;\n\tz-index: 10 !important;\n\tleft: 70% !important;\n\ttop: 60% !important;\n}\n\n/*.like-button2 {\n\tfont-size: 15px !important;\n\tposition: absolute !important;\n\tz-index: 10 !important;\n\tleft: 80% !important;\n\ttop: 70% !important;\n\tdisplay: none !important;\n}*/\n\n.dropdown-menu {\n\ttop: 75% !important;\n}\n\n.login-out {\n\tcolor: red !important;\n}\n\n.navbar-nav>li>a {\n\tcolor: #d4c8bb !important;\n}\n\n.navbar-nav>li>a:hover{\n\tcolor: #e83038 !important;\n}\n\n.logo-word {\n\tfont-family:chiller;\n\tfont-size:25px;\n\tcolor:#dad5d5 !important;\n}\n\n.log-word:hover {\n\tcolor:red !important;\n}\n\n.to-big:hover {\n    transition:transform .8s cubic-bezier(0.23, 1, 0.32, 1), box-shadow .8s cubic-bezier(0.23, 1, 0.32, 1);\n    box-shadow:0 0 20px rgba(0, 0, 0, 0.3);\n    transform:scale(1.05);\n    z-index:2;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/order.css",
    "content": ".header-border {\n    border-bottom: solid 1px #c6c5c5;\n}\n\n.h4-mar{\n    margin-top: 30px;\n}\n\n.h4-mar-2 {\n    margin-top: 30px;\n}\n\n.address>.radio {\n    padding-left: 50px;\n}\n\n.radio>label {\n    margin: 5px 0 5px 0;\n}\n\n.address-check input[type='checkbox']:checked {\n    background: #FFF0E8;\n    border: solid 1px #f40;\n}\n\n.manage-a {\n    font-size: 15px;\n    color: #2aabd2;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/release.css",
    "content": "@charset \"utf-8\";\n/* CSS Document */\n\n.release {\n  margin-left: 10%;\n  width: 80%;\n}\n\n.submit-input {\n  /*width:30%; */\n  /*margin-left:*/\n}\n\n.upload-button {\n  /*width: 30%*/;\n  margin-left: 0;\n}\n\nh1 {\n  /*margin-left:-50px;*/\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/shopcart.css",
    "content": "﻿/*  1. Template default css\n/*========================================*/\n@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i|Oswald:300,400,700');\n\nhtml,\nbody {\n height: 100%;\n}\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #fa7c63;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n  text-decoration: none !important;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n.section-padding {\n  padding-bottom: 50px;\n}\n.section-title {\n  margin-bottom: 35px;\n}\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n::selection {\n   background: #b3d4fc;\n   text-shadow: none;\n}\n.browserupgrade {\n  margin: 0.2em 0;\n  background: #ccc;\n  color: #000;\n  padding: 0.2em 0;\n}\n\n/*----------------------------------------*/\n/*  23. Shopping cart area\n/*----------------------------------------*/\n.dm_content_2 {\n  margin-top: 36px;\n}\n.new_act_4{\n  margin-top: 20px;\n  margin-left: -15px\n}\n.cramb_area_4{\n  margin-left: -19px;\n}\n.button_act.button_act_3.button_act_333 {\n  margin-left: 94px;\n  margin-top: 2px;    \n}\n.wishlist-table-2 table th, .wishlist-table-2 table td {\n  font-family: Open Sans,sans-serif;\n  font-size: 12px;\n  font-weight: 700;\n  padding: 16px 28px;\n  text-align: left;\n  text-transform: uppercase;\n}\n.wishlist-table-2 table .product-thumbnail-2 {\n  width: 195px;\n}\n.product-thumbnail.product-thumbnail-2 img {\n  /* margin-left: 22px; */\n}\n.latest_es_from_2 > input[type=\"number\"] {\n  background: #ffffff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  font-weight: normal;\n  height: 40px;\n  padding: 0 10px;\n  transition: all 0.3s ease 0s;\n  width: 52px;\n  margin-left: 18px;    \n}\n.amount-list.amount-list-2 {\n  margin-left: 19px;\n}\n.coupon .input-text {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  height: 40px;\n  line-height: 40px;\n  width: 150px !important;\n  border: 1px solid #d3ced2;\n  box-sizing: border-box;\n  float: left;\n  line-height: 1;\n  margin: 0 4px 0 0;\n  outline: 0 none;\n  padding: 6px 11px 5px;\n  font-weight: normal;\n  border-radius: 3px;    \n}\n.product-remove.product-remove_2 > a {\n  margin-left: -34px;\n  padding: 0px 45px;\n}\n.button_act.button_act_3.button_act_333.button_act_tp{\n  margin-left: 83% !important;\n  margin-top: 0;\n}\n.button_act.btn-tip {\n  margin-left: 672px;\n}\n.button_act.btn-tip:hover{\n  background-color: #ebe9eb;\n  color: inherit;    \n}\n.cart_totals {\n  /*margin: 0px 0 0;*/\n}\n.cart_totals h2 {\n  font-size: 20px;\n  margin: 0 0 30px;\n  text-transform: uppercase;\n}\n.shop_table td {\n  border-top: 0 none;\n  padding: 20px 28px;\n}\n.cart_totals .cart-subtotal .amount, .cart_totals .order-total .amount {\n  font-size: 16px;\n  font-weight: bold;\n}\n.shop_table {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-collapse: separate;\n  border-radius: 5px;\n  margin: 0 -1px 34px 0;\n  text-align: left;\n  width: 100%;\n}\n.shop_table th {\n  font-weight: 700;\n  padding: 9px 12px;\n}\n.button_act.button_act-tc {\n  margin-bottom: 50px;\n}\n.coupon {\n  margin-bottom: 10px;\n  margin-top: 7px;\n}\n.account_heading.account_heading_ah {\n  margin: -6px 0;\n}\n\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0;\n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n\n.wishlist-table table {\n  background: #fff none repeat scroll 0 0;\n  border-color: #e8e8e9;\n  border-radius: 0;\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n  margin: 20px 0 33px;\n  width: 100%;\n}\n.wishlist-table table{}\n.wishlist-table table th {\n  font-weight: 600;\n}\n.wishlist-table table th, .wishlist-table table td {\n  border-bottom: 1px solid #e7e7e7;\n  border-right: 1px solid #e7e7e7;\n  font-size: 14px;\n  font-weight: 500;\n  padding: 15px 12px;\n  text-align: left;\n  text-transform: uppercase;\n  font-family: Open Sans,sans-serif;  \n}\n.wishlist-table table .product-remove {\n  padding: 20px 28px;\n  width: 20px;\n}\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n.wishlist-table table .product-thumbnail {\n  width: 100px;\n}\n.wishlist-table table td.product-price .amount {\n  font-weight: 700;\n}\n.wishlist-table table .wishlist-in-stock {\n  color: #297e29;\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 55px;\n  text-transform: capitalize;\n}\n\ntable th, table td {\n  border-bottom: 1px solid #e1e1e1;\n  border-right: 1px solid #e1e1e1;\n  padding: 8px;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/shopdetail.css",
    "content": "@charset \"utf-8\";\n\n/*通用样式*/\n.shopdetails a{\n\ttext-decoration:none;\n\tcolor:#333;\n\tfont-size:12px;\n}\n.shopdetails ul,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,p{\n\tpadding:0; margin:0;\n\tlist-style:none;\n}\n.shopdetails img{ border:0px;}\n.clear{\n\tclear:both;\n}\n\n\n/*放大镜*/\n#leftbox{\n\twidth:400px;\n\tz-index:999;\n\tmargin-left: 15px;\n\t/*position:absolute;*/\n}\n#showbox { background:#eee;}\n#showbox img{\n\tz-index: 100;\n}\n#showbox span {\n\tbackground:url(../image/whitebg.png) repeat;\n}\n#showsum {\n\tleft:25px;\n\tmargin-top:10px;\n}\n#showsum span {\n\tborder:1px solid #ddd;\n}\n#showsum span.sel {\n\tborder:1px solid #f60;\n}\n\n.showpage {\n\twidth:400px;\n\tposition:relative;\n}\n.showpage a {\n\tdisplay:block; width:15px;\n\tborder:1px solid #ddd;\n\theight:60px; line-height:60px;\n\tbackground:#eee;\n\ttext-align:center;\n\tfont-size:18px;\n\tposition:absolute;\n\tleft:0; top:-62px;\n\ttext-decoration:none;\n\tcolor:#999;}\n.showpage a#shownext {\n\tleft:auto; right:0;\n}\n.showpage a:hover {\n\tbackground:#ccc;\n\tcolor:#777;\n}\n\n.rel-div {\n    position: relative;\n    top: 50px;\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/style.css",
    "content": "﻿/*-----------------------------------------------------------------------------------\n\n    Template Name: Orienko Responsive eCommerce Fashion Template\n    Template URI: http://bootexperts.com\n    Description: This is html5 template\n    Author: BootExperts\n    Author URI: http://bootexperts.com\n    Version: 1.0\n\n===============================================================\n\nCSS INDEX\n===================\n1. Template default css\n\n5. product area\n6. plus area\n7. catagory area\n8. differ pic area\n9. lumia area\n10. top rate area\n11. fchared area\n12. blog area\n13. logo area\n14. Checkout page\n15. newsletter area\n16. footer top area\n    16.1 footer middle area\n    16.2 footer botom area\n17. home page 2\n18. home page 3\n19. shop area left\n20. shop area right\n21. my account area\n22. wishlist area\n23. shopping cart area\n24. simple product area\n25. variable product area\n26. grouped product area\n\n==============================================================*/\n\n\n/*========================================*/\n\n/*  1. Template default css\n/*========================================*/\n@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i|Oswald:300,400,700');\n\n.big-font {\n  font-size: 20px !important;\n  padding-top: 20px;\n}\n\n.main-detail-nav>li {\n  display: inline-block;\n}\n\n.main-detail-nav {\n  margin-left: 15px !important;\n}\n\nhtml,\nbody {\n height: 100%;\n}\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #39ADB4;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0;\n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n/*----------------------------------------*/\n/*  6. Plus area\n/*----------------------------------------*/\n.plus_area {\n  margin-bottom: 38px;\n}\n.pix_new {\n  display: inline-block;\n  margin: 0;\n  max-width: 100%;\n  position: relative;\n  vertical-align: top;\n  z-index: 9;\n}\n.pix_new a::before {\n  background: rgba(255, 255, 255, 0.3) none repeat scroll 0 0;\n  bottom: 0;\n  content: \"\";  \n  left: 0;\n  opacity: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 99;\n}\n.pix_new img {\n  height: auto;\n  max-width: 100%;\n  vertical-align: top;\n} \n.pix_new a {\n  display: block;\n  overflow: hidden;\n  position: relative;\n}\n.pix_new a:hover::before {\n   left: 50%;\n   opacity: 1;\n   right: 50%;\n   transition: all 900ms ease 0s;\n}\n/*----------------------------------------*/\n/*  7. Catagory area\n/*----------------------------------------*/\n.favtabs > li {\n  display: inline-block;\n}\n.favtabs > li > a {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 1px solid #dfdfdf !important;\n  border-radius: 3px;\n  display: block;\n  font-size: 13px;\n  height: 33px;\n  line-height: 31px;\n  margin: 1;\n  padding: 0 15px;\n  position: relative;\n  transition: all 0.3s ease 0s;\n  color: #666;\n}\n.favtabs li a:hover{\n  background: #39ADB4;\n  color: #fff;\n  border-color: #39ADB4 !important;\n  border-width: 1px 1px 2px !important;    \n}\n.favtabs > li.active > a {\n  background: #39ADB4;\n  color: #fff;\n  border-color: #39ADB4!important;\n  border-image: none !important;\n  border-style: solid !important;\n  border-width: 1px 1px 2px !important;     \n}\n.favtabs {\n  margin: 0;\n  position: absolute;\n  right: 0;\n  top: -45px;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n  opacity: 0;\n}\n.feature-carousel:hover.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n    opacity: 1;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: 137px;\n  width: 100%;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 14px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 15px;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-prev:hover {\n  border-color:#39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-next:hover {\n  border-color:#39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n/*----------------------------------------*/\n/*  8. Differ pic area\n/*----------------------------------------*/\n.differ_pic {\n  margin-bottom: 38px;\n}\n/*----------------------------------------*/\n/*  9. Lumia area\n/*----------------------------------------*/\n\n.lumia_area {\n  margin-bottom: 38px;\n}\n/*----------------------------------------*/\n/*  10. Top rate area\n/*----------------------------------------*/\n.top_rate_area {\n  margin-bottom: 8px;\n  overflow: hidden;\n}\n.top_rate_area.top_rate_area_2 {\n  margin-bottom: 2px;\n}\n.llc_pro {\n  float: left;\n  width: 100px;\n}\n.product_name_new h2 a {\n  font-size: 14px;\n}\n.product_price.product_price_new_3 {\n  margin-top: -3px;\n}\n.sinle_pic_2 {\n  border: 0;\n  overflow: hidden;\n  position: relative;\n}\n.sinle_pic_2 a {\n  position: relative;\n  display: block;\n}\n.sinle_pic_2 img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic_2 img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros-ex:hover .sinle_pic_2 img.secondary-img,\n.all-pros-ex:hover .sinle_pic_2 img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n}\n.product_content_2 {\n  border: 0 none;\n  margin-bottom: 8px;\n  margin-left: 111px;\n  margin-top: -11px;\n  padding: 0 0 0 11px;\n  text-align: left;\n}\n.all-pros-ex {\n  animation-delay: 100ms;\n  animation-duration: 0.5s;\n  margin-top: 25px;\n  overflow: hidden;\n  position: relative;\n  border-bottom: 1px solid#e5e5e5;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -71px;\n  width: 100%;\n  left: 14px;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 187px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-prev:hover {\n  border-color: #39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-next:hover {\n  border-color: #39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.single-sidebar {\n  float: left;\n  margin: 0 0 30px;\n  padding: 20px;\n  width: 90%;\n  border: 1px solid#e1e1e1;\n}\n.single-sidebar h3 {\n  color: #444;\n  font-size: 16px;\n  margin: 0 0 25px;\n text-transform: uppercase;\n}\n.compare_content .new_tag > a {\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  display: inline-block;\n  font-size: 12px !important;\n  font-weight: normal;\n  line-height: 30px;\n  margin: 0 5px 5px 0;\n  padding: 0 12px;\n  text-transform: capitalize;\n  color: #666;\n}\n.new_tag a:hover {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-color: #39ADB4;\n  color: #fff;\n}\n/*----------------------------------------*/\n/*  11. Fchared area\n/*----------------------------------------*/\n.fchered_area {\n  margin-bottom: 30px;\n}\n.fchered_item {\n  background: #fff none repeat scroll 0 0;\n  padding: 0 0 25px;\n  text-align: center;\n}\n.fechered_pix {\n  border-bottom: 1px solid#e1e1e1;\n}\n.fechered_heading h3 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 14px;\n  font-weight: bold;\n  margin: 25px 0 20px;\n  text-transform: uppercase;\n}\na.view_button {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px !important;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n  cursor: pointer\n}\na.view_button:hover {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-color: #39ADB4;\n  color: #fff;\n}\n.chard_ex_al {\n  border: 1px solid #e1e1e1;\n  margin-bottom: 38px;\n}\n.indicator-brand-5.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -103px;\n  width: 100%;\n  left: 10px;\n}\n.indicator-brand-5.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n}\n.indicator-brand-bg.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 1062px;\n}\n/*----------------------------------------*/\n/*  12. Blog area\n/*----------------------------------------*/\n.blog {\n  margin-bottom: 31px;\n  overflow: hidden;\n}\n.blog_thumb {\n  position: relative;\n}\n.blog_thumb a::before {\n  backface-visibility: hidden;\n  background: rgba(63, 63, 63, 0.5) none repeat scroll 0 0;\n  bottom: 0px;\n  content: \"\";\n  left: 0;\n  opacity: 0;\n  overflow: hidden;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  top: 0;\n  transition: opacity 0.4s ease 0s;\n  z-index: 2;\n}\n.blog_thumb a::after {\n  bottom: 0;\n  color: #fff;\n  content: \"\";\n  font-family: FontAwesome;\n  font-size: 30px;\n  height: 30px;\n  left: 0;\n  line-height: 30px;\n  margin: auto;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  transform: scaleX(-1);\n  transition: transform 400ms ease 0s;\n  visibility: hidden;\n  width: 30px;\n  z-index: 11;\n}\n.blog_thumb a {\n  display: block;\n  overflow: hidden;\n}\n.blog_thumb a:hover::before {\n  opacity: 1;\n  visibility: visible;\n}\n.blog_thumb a:hover::after {\n  opacity: 1;\n  transform: scaleX(1);\n  visibility: visible;\n}\n.blog_thumb a img {\n  backface-visibility: hidden;\n  transition: opacity 0.5s ease 0s, transform 0.5s ease 0s;\n}\n.blog_thumb a:hover img {\n  transform: scale3d(1.1, 1.1, 1);\n}\n.blog_thumb .blogdate {\n  background: #fff none repeat scroll 0 0;\n  border-radius: 100%;\n  bottom: -12px;\n  color: #888888;\n  font-size: 13px;\n  height: 60px;\n  left: 0;\n  line-height: 1;\n  margin: 0 auto;\n  padding: 4px;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  width: 60px;\n  z-index: 11;\n}\n.blog_thumb .blogdate div {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-bottom: 2px solid #39ADB4;\n  border-radius: 100%;\n  color: #ffffff;\n  display: block;\n  font-size: 11px;\n  height: 100%;\n  text-align: center;\n  text-transform: uppercase;\n  width: 100%;\n}\n.blog_info {\n  margin: 20px 0 0;\n  position: relative;\n}\n.blog_info .post-title {\n  font-family: Open Sans,sans-serif;\n  font-size: 16px;\n  font-weight: 600;\n  text-transform: capitalize;\n  color: #333;    \n}\n.post-title > a {\n  color: #333333;\n}\n.blog_info .post-title a:hover {\n  color: #fa7c63;\n}\n.blog_thumb .blogdate div .day {\n  display: block;\n  font-family: Oswald, sans-serif;\n  font-size: 16px;\n  padding: 10px 0 3px;\n}\n.blog_info .post-excerpt {\n  clear: both;\n  margin: 10px 0;\n  color: #666\n}\n.blog_info .readmore-text {\n  font-weight: bold;\n  text-decoration: underline;\n}\n.blog_info .readmore-text:hover {\n  color: #fa7c63;\n}\n.indicator-brand-6.owl-theme .owl-controls .owl-buttons {\n  left: 9px;\n  position: absolute;\n  top: -98px;\n  width: 100%;\n}\n.indicator-brand-6.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 772px;\n  position: absolute;\n  right: 0;\n}\n/*----------------------------------------*/\n/*  13. Logo area\n/*----------------------------------------*/\n.main_brand {\n  margin-bottom: 10px;\n  padding: 14px;\n}\n.all_brand {\n  border: 1px solid#e1e1e1;\n}\n.all_brand.all_brand_zx.indicator-brand.indicator-brand-7.owl-carousel.owl-theme {\n  background: #ffffff none repeat scroll 0 0;\n}\n.brand_pix {\n  margin-bottom: 14px;\n  margin-top: 20px;\n}\n.brand {\n  margin-bottom: 18px;\n}\n.brand.brand-2.brand-3 {\n  margin-top: 15px;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons {\n  left: -2px;\n  position: absolute;\n  top: -105px;\n  width: 100%;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 1065px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons div.owl-next {\n  right: -2px;\n}\n.main_brand.main_brand_tf {\n  margin-top: -13px;\n  padding: 28px;\n}\n\n\n\n/*----------------------------------------*/\n/*  24. Simple product area\n/*----------------------------------------*/\n.elv_heading h3{\n  font-weight: normal;\n}\n#gallery_new a {\n  padding-bottom: 15px;\n}\n.last_button_area_px{\n  margin: -14px 0 8px;\n}\n.cramb_area_5 > li::after {\n  content: \"\";\n}\n.cramb_area.cramb_area_5 {\n  margin-top: 20px;\n}\n.cramb_area_5{\n  border-bottom: 1px solid#e1e1e1;\n  margin-left: 4px;    \n}\n.cramb_area.cramb_area_2 {\n  border-bottom: 0 none;\n}\n.cramb_area.cramb_area_2 > li::after {\n  display: none;\n}\n.cramb_area.cramb_area_2.cramb_area_3 {\n  border-bottom: 1px solid #e1e1e1;\n}\n.shop_menu_2 ul li.br-active{\n  color: #39ADB4;\n}\n.zoomContainer {\n  border: 1px solid #e1e1e1;\n}\n#gallery_new a {\n  float: left;\n  width: 25%;\n  margin-top: 25px;    \n}\n.elavator_area {\n  overflow: hidden;\n  padding-bottom: 50px;\n}\n.evavet_description{\n  margin-top: 20px; \n}\n.elavetor_social {\n  border-top: 1px solid #d2d2d2;\n  margin: 15px 0 0;\n  padding: 15px 0 0;\n}\n.widget-title{\n  display: inline-block;\n  font-size: 11px;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n ul.social-link {\n  display: inline-block;\n  list-style: outside none none;\n  margin: 0 5px 5px 0;\n  padding: 0;\n}\n.social-link li{\n  display: inline-block;\n}\n.social-link li{\n  padding: 0 10px;\n}\n.old-.price-2{\n  font-size: 20px;\n  font-weight: 600;\n  color: #666;    \n}\n.spical-price-2{\n  color: #fa7c63;\n  font-size: 20px;\n  font-weight: 600;\n}\n.cart-btn-area{\n    margin: 20px 0;\n}\n.cart-btn-area > input[type=\"number\"] {\n  border: 1px solid #e1e1e1;\n  font-size: 15px;\n  height: 55px;\n  line-height: 55px;    \n  padding: 0 10px;\n  text-align: center;\n  width: 60px;\n  border-radius: 3px;    \n}\n.button_act.button_act_ct {\n  margin-bottom: 8px;\n}\nbutton.add-tocart {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #467ecb none repeat scroll 0 0;\n  border-color: #3060a3;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #ffffff;\n  display: inline-block;\n  font-family: Oswald,sans-serif;\n  font-size: 18px;\n  font-weight: normal;\n  height: 55px;\n  padding: 0 20px !important;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n  margin-left: 8px;    \n}\nbutton.add-tocart:hover{\n background: #39ADB4;\n color: #fff;\n border-color: #39ADB4;\n}\n.comapre_area {\n  margin-left: 21px;\n  margin-top: 10px;\n}\n.show-2 {\n  margin-left: 9px;\n}\n.new_meta {\n  border-top: 1px solid #d2d2d2;\n  margin: 20px 0 0;\n  padding: 10px 0 0;\n}\n .sku_wrapper {\n  display: block;\n  font-weight: bold;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n .sku_wrapper span {\n  font-weight: normal;\n  text-transform: none;\n}\n.tagged_as {\n  display: block;\n  font-weight: bold;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n.tab_area_start {\n  padding: 50px 0;\n}\n.favtabs.favtabs-2 {\n  right: 954px;\n}\n.favtabs-2 > li {\n  margin: 2px;\n}\n.favtabs-2 > li > a {\n  background: #eee;    \n  height: 50px;\n  line-height: 50px;\n  padding: 0 18px;\n  text-transform: uppercase;\n  font-size: 16px;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;    \n}\n.tb_desc{\n  border: 1px solid #e1e1e1;\n  border-radius: 0;\n  box-shadow: none;\n  padding: 20px;\n  margin-top: 7px;\n  text-align: left;\n  overflow: hidden;\n}\n.tb_desc > h2 {\n  font-size: 20px;\n  font-weight: normal;\n  margin: 0 0 20px;\n}\n.favtabs.favtabs-2::after {\n  background: #39ADB4 none repeat scroll 0 0;\n  color: #ff0000;\n  content: \"\";\n  height: 3px;\n  left: 2px;\n  position: absolute;\n  top: 50px;\n  width: 1140px;\n  z-index: 99999;\n}\n.another_icon.fa.fa-heart {\n  border: 2px solid #dedede;\n  border-radius: 3px;    \n  font-size: 18px;\n  height: 40px;\n  line-height: 37px;\n  margin-right: 8px;\n  text-align: center;\n  width: 40px;\n  margin-bottom: 10px; \n  color: #999999;  \n}  \n.add_defi > a:hover .another_icon.fa.fa-heart{\n   background: #39ADB4;\n   border: 2px solid #39ADB4;\n   color: #fff;    \n}\n.add_defi, .add_defi_2 > a {\n  font-weight: 400;\n  text-transform: uppercase;\n  font-family: Oswald,sans-serif;\n}\n.another_icon.fa.fa-refresh{\n  border: 2px solid #dedede;\n  border-radius: 3px;    \n  font-size: 18px;\n  height: 40px;\n  line-height: 37px;\n  margin-right: 8px;\n  text-align: center;\n  width: 40px;\n  color: #999999;    \n}\n.add_defi_2 > a:hover .another_icon.fa.fa-refresh{\n   background: #fa7c63;\n   border: 2px solid #fa7c63;\n   color: #fff;    \n}\n.review_area_heading #comnt h2{\n  font-size: 25px;\n  font-weight: normal;\n  margin: 0 0 20px;\n}\n.review_area_heading #comnt ol.commentlist li img.avatar {\n  background: #ebe9eb none repeat scroll 0 0;\n  border: 1px solid #e4e1e3;\n  box-shadow: none;\n  float: left;\n  height: auto;\n  left: 0;\n  margin: 0;\n  padding: 3px;\n  position: absolute;\n  top: 0;\n  width: 32px;\n}\n .review_area_heading #comnt ol.commentlist li .comment-text {\n  border: 1px solid #e4e1e3;\n  border-radius: 4px;\n  margin: 0 0 0 50px;\n  padding: 1em 1em 0;\n}\n.star-rating {\n  float: right;\n  font-size: 1em;\n  height: 1em;\n  line-height: 1;\n  overflow: hidden;\n  position: relative;\n  width: 5.4em;\n}\n.review_area_heading #comnt ol.commentlist {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  list-style: outside none none;\n  margin: 0;\n  width: 100%;\n}\n .review_area_heading #comnt ol.commentlist li {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 center;\n  border: 0 none;\n  margin: 0 0 20px;\n  padding: 0;\n  position: relative;\n}\n.review_area_heading #comnt ol.commentlist li img.avatar {\n  background: #ebe9eb none repeat scroll 0 0;\n  border: 1px solid #e4e1e3;\n  box-shadow: none;\n  float: left;\n  height: auto;\n  left: 0;\n  margin: 0;\n  padding: 3px;\n  position: absolute;\n  top: 0;\n  width: 32px;\n}\n.price_rating_2 > a > i {\n  color: #666;\n  font-size: 12px;\n}\n#comnt{\n float: left;\n width: 100%;\n padding-right: 20px;    \n}\n.review_form_area {\n  border-color: #e1e1e1;\n  border-style: solid;\n  border-width: 0 0 0 1px;\n  float: left;\n  padding: 0 0 0 30px;\n  width: 40%;\n}\n.revew_form_content {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  margin: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n #reply-title {\n  font-size: 20px;\n  font-weight: normal;\n  margin: 0 0 20px;\n} #commentform p label {\n  display: block;\n  font-weight: normal;\n}\n.price_rating_3 > a > i {\n  color:#666;\n  font-size: 14px;\n}\n.price_rating_3 > a > i:hover{\n    color: #fa7c63;\n}\n.mix_type input:not([type]), .mix_type input[type=\"text\"], .mix_type input[type=\"password\"], .mix_type input[type=\"date\"], .mix_type input[type=\"datetime\"], .mix_type input[type=\"datetime-local\"], .mix_type input[type=\"month\"], .mix_type input[type=\"week\"], .mix_type input[type=\"email\"], .mix_type input[type=\"number\"], .mix_type input[type=\"search\"], .mix_type input[type=\"tel\"], .mix_type input[type=\"time\"], .mix_type input[type=\"url\"], .mix_type input[type=\"color\"], textarea {\n  background: #fff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  height: 40px;\n  padding: 5px;\n  transition: all 0.3s ease 0s;\n}\n#commentform input {\n  border: 1px solid #e1e1e1;\n  max-width: 500px;\n  padding: 5px 10px;\n  width: 100%;\n}\n #commentform p.form-submit input {\n  height: 35px;\n  line-height: 35px;\n  padding: 0 10px;\n}\n.revew_form_content textarea {\n  box-sizing: border-box;\n  width: 100%;\n}\n.revew_form_content #comment {\n  height: 75px;\n}\n.comment {\n  font-weight: normal;\n}\n #commentform p label {\n  display: block;\n  font-weight: normal;\n}\n.form-submit input{\n  border: none;\n  background-color: #ebe9eb;\n  font-weight: 700;\n  color: #515151;    \n}\n.form-submit input:hover {\n  background-color: #dad8da;\n  color: #515151;\n  text-decoration: none;\n}\n.price_rating.price_rating_2.price_rating_3 {\n  margin-top: -1px;\n  margin-bottom: 18px;    \n}\n.required_menu{\n  color: #666;\n}\n.comment-form-comment, .comment-form-author, .comment-form-email {\n  margin-bottom: 14px;\n}\n.brand.brand-2 {\n  margin-top: 0;\n}\n/*----------------------------------------*/\n/*  25. Variable product area\n/*----------------------------------------*/\n .bar_box_3 select {\n  border: 1px solid #eaeaea;\n  background-color: #f7f7f7;\n  color: #666;\n  height: 28px;\n  line-height: 28px;\n  width: 310px;\n  padding: 0 10px; \n  margin-left: 15px;     \n}\n.bar_box.bar_box_3 label{\n  font-weight: normal\n}\nform.cart {\n  margin: 20px 0;\n}\n.bar_box_4 select{\n  margin-left: 22px;\n  margin-bottom: 30px;\n} \n.favtabs.favtabs-2.favtabs-3 {\n  right: 731px;\n}\ntable.shop_attributes {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  border-color: rgba(0, 0, 0, 0.1) -moz-use-text-color -moz-use-text-color;\n  border-image: none;\n  border-style: dotted none none;\n  border-width: 1px 0 0;\n  margin-bottom: 1.618em;\n  width: 100%;\n}\ntable.shop_attributes th {\n  font-weight: 700;\n  padding: 8px;\n  width: 150px;\n  border-bottom: 1px dotted rgba(0, 0, 0, 0.1);\n  border-top: 0 none;\n  line-height: 1.5;\n  margin: 0;    \n}\ntable.shop_attributes td {\n  font-style: italic;\n  padding: 0;\n}\ntable.shop_attributes td p {\n  margin: 0;\n  padding: 8px 0;\n}\ntable.shop_attributes .alt td, table.shop_attributes .alt th {\n  background: rgba(0, 0, 0, 0.024) none repeat scroll 0 0;\n}\ntable th, table td {\n  border-bottom: 1px solid #e1e1e1;\n  border-right: 1px solid #e1e1e1;\n  padding: 8px;\n}\n/*----------------------------------------*/\n/*  26. Grouped product area\n/*----------------------------------------*/\n.latest_es_from > input[type=\"number\"] {\n  border: 1px solid #e1e1e1;\n  font-size: 15px;\n  height: 55px;\n  line-height: 55px;    \n  padding: 0 10px;\n  text-align: center;\n  width: 60px;\n  border-radius: 3px;    \n}\n.price {\n  font-size: 16px;\n  font-weight: normal;\n  padding: 2px 5px 10px 216px;\n}\n.price ins {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  color: #fa7c63;\n  font-weight: 600;\n}\n.al_df_frm{\n  border-bottom: 1px solid#e1e1e1;\n}\n.new_labl > a {\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 10px;\n}\nbutton.add-tocart-2 {\n margin-left: -3px;\n margin-top: 25px;\n}\n.price.price-2 {\n  margin-bottom: 10px;\n}\n.price.price_zx {\n  margin-left: -210px;\n}\n.dspc_area {\n  margin-bottom: 23px;\n  margin-left: 67px;\n  margin-top: -57px;\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/sweetalert.css",
    "content": "body.stop-scrolling {\n  height: 100%;\n  overflow: hidden; }\n\n.sweet-overlay {\n  background-color: black;\n  /* IE8 */\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\";\n  /* IE8 */\n  background-color: rgba(0, 0, 0, 0.4);\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: none;\n  z-index: 10000; }\n\n.sweet-alert {\n  background-color: white;\n  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  width: 478px;\n  padding: 17px;\n  border-radius: 5px;\n  text-align: center;\n  position: fixed;\n  left: 50%;\n  top: 50%;\n  margin-left: -256px;\n  margin-top: -200px;\n  overflow: hidden;\n  display: none;\n  z-index: 99999; }\n  @media all and (max-width: 540px) {\n    .sweet-alert {\n      width: auto;\n      margin-left: 0;\n      margin-right: 0;\n      left: 15px;\n      right: 15px; } }\n  .sweet-alert h2 {\n    color: #575757;\n    font-size: 30px;\n    text-align: center;\n    font-weight: 600;\n    text-transform: none;\n    position: relative;\n    margin: 25px 0;\n    padding: 0;\n    line-height: 40px;\n    display: block; }\n  .sweet-alert p {\n    color: #797979;\n    font-size: 16px;\n    text-align: center;\n    font-weight: 300;\n    position: relative;\n    text-align: inherit;\n    float: none;\n    margin: 0;\n    padding: 0;\n    line-height: normal; }\n  .sweet-alert fieldset {\n    border: none;\n    position: relative; }\n  .sweet-alert .sa-error-container {\n    background-color: #f1f1f1;\n    margin-left: -17px;\n    margin-right: -17px;\n    overflow: hidden;\n    padding: 0 10px;\n    max-height: 0;\n    webkit-transition: padding 0.15s, max-height 0.15s;\n    transition: padding 0.15s, max-height 0.15s; }\n    .sweet-alert .sa-error-container.show {\n      padding: 10px 0;\n      max-height: 100px;\n      webkit-transition: padding 0.2s, max-height 0.2s;\n      transition: padding 0.25s, max-height 0.25s; }\n    .sweet-alert .sa-error-container .icon {\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background-color: #ea7d7d;\n      color: white;\n      line-height: 24px;\n      text-align: center;\n      margin-right: 3px; }\n    .sweet-alert .sa-error-container p {\n      display: inline-block; }\n  .sweet-alert .sa-input-error {\n    position: absolute;\n    top: 29px;\n    right: 26px;\n    width: 20px;\n    height: 20px;\n    opacity: 0;\n    -webkit-transform: scale(0.5);\n    transform: scale(0.5);\n    -webkit-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n    -webkit-transition: all 0.1s;\n    transition: all 0.1s; }\n    .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {\n      content: \"\";\n      width: 20px;\n      height: 6px;\n      background-color: #f06e57;\n      border-radius: 3px;\n      position: absolute;\n      top: 50%;\n      margin-top: -4px;\n      left: 50%;\n      margin-left: -9px; }\n    .sweet-alert .sa-input-error::before {\n      -webkit-transform: rotate(-45deg);\n      transform: rotate(-45deg); }\n    .sweet-alert .sa-input-error::after {\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n    .sweet-alert .sa-input-error.show {\n      opacity: 1;\n      -webkit-transform: scale(1);\n      transform: scale(1); }\n  .sweet-alert input {\n    width: 100%;\n    box-sizing: border-box;\n    border-radius: 3px;\n    border: 1px solid #d7d7d7;\n    height: 43px;\n    margin-top: 10px;\n    margin-bottom: 17px;\n    font-size: 18px;\n    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n    padding: 0 12px;\n    display: none;\n    -webkit-transition: all 0.3s;\n    transition: all 0.3s; }\n    .sweet-alert input:focus {\n      outline: none;\n      box-shadow: 0px 0px 3px #c4e6f5;\n      border: 1px solid #b4dbed; }\n      .sweet-alert input:focus::-moz-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus:-ms-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus::-webkit-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n    .sweet-alert input::-moz-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-ms-clear {\n      display: none; }\n    .sweet-alert input:-ms-input-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-webkit-input-placeholder {\n      color: #bdbdbd; }\n  .sweet-alert.show-input input {\n    display: block; }\n  .sweet-alert .sa-confirm-button-container {\n    display: inline-block;\n    position: relative; }\n  .sweet-alert .la-ball-fall {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    margin-left: -27px;\n    margin-top: 4px;\n    opacity: 0;\n    visibility: hidden; }\n  .sweet-alert button {\n    background-color: #8CD4F5;\n    color: white;\n    border: none;\n    box-shadow: none;\n    font-size: 17px;\n    font-weight: 500;\n    -webkit-border-radius: 4px;\n    border-radius: 5px;\n    padding: 10px 32px;\n    margin: 26px 5px 0 5px;\n    cursor: pointer; }\n    .sweet-alert button:focus {\n      outline: none;\n      box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }\n    .sweet-alert button:hover {\n      background-color: #7ecff4; }\n    .sweet-alert button:active {\n      background-color: #5dc2f1; }\n    .sweet-alert button.cancel {\n      background-color: #C1C1C1; }\n      .sweet-alert button.cancel:hover {\n        background-color: #b9b9b9; }\n      .sweet-alert button.cancel:active {\n        background-color: #a8a8a8; }\n      .sweet-alert button.cancel:focus {\n        box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }\n    .sweet-alert button[disabled] {\n      opacity: .6;\n      cursor: default; }\n    .sweet-alert button.confirm[disabled] {\n      color: transparent; }\n      .sweet-alert button.confirm[disabled] ~ .la-ball-fall {\n        opacity: 1;\n        visibility: visible;\n        transition-delay: 0s; }\n    .sweet-alert button::-moz-focus-inner {\n      border: 0; }\n  .sweet-alert[data-has-cancel-button=false] button {\n    box-shadow: none !important; }\n  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n    padding-bottom: 40px; }\n  .sweet-alert .sa-icon {\n    width: 80px;\n    height: 80px;\n    border: 4px solid gray;\n    -webkit-border-radius: 40px;\n    border-radius: 40px;\n    border-radius: 50%;\n    margin: 20px auto;\n    padding: 0;\n    position: relative;\n    box-sizing: content-box; }\n    .sweet-alert .sa-icon.sa-error {\n      border-color: #F27474; }\n      .sweet-alert .sa-icon.sa-error .sa-x-mark {\n        position: relative;\n        display: block; }\n      .sweet-alert .sa-icon.sa-error .sa-line {\n        position: absolute;\n        height: 5px;\n        width: 47px;\n        background-color: #F27474;\n        display: block;\n        top: 37px;\n        border-radius: 2px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n          left: 17px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n          right: 16px; }\n    .sweet-alert .sa-icon.sa-warning {\n      border-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-body {\n        position: absolute;\n        width: 5px;\n        height: 47px;\n        left: 50%;\n        top: 10px;\n        -webkit-border-radius: 2px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-dot {\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        -webkit-border-radius: 50%;\n        border-radius: 50%;\n        margin-left: -3px;\n        left: 50%;\n        bottom: 10px;\n        background-color: #F8BB86; }\n    .sweet-alert .sa-icon.sa-info {\n      border-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::before {\n        content: \"\";\n        position: absolute;\n        width: 5px;\n        height: 29px;\n        left: 50%;\n        bottom: 17px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::after {\n        content: \"\";\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        margin-left: -3px;\n        top: 19px;\n        background-color: #C9DAE1;\n        left: 50%; }\n    .sweet-alert .sa-icon.sa-success {\n      border-color: #A5DC86; }\n      .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {\n        content: '';\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        position: absolute;\n        width: 60px;\n        height: 120px;\n        background: white;\n        -webkit-transform: rotate(45deg);\n        transform: rotate(45deg); }\n      .sweet-alert .sa-icon.sa-success::before {\n        -webkit-border-radius: 120px 0 0 120px;\n        border-radius: 120px 0 0 120px;\n        top: -7px;\n        left: -33px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 60px 60px;\n        transform-origin: 60px 60px; }\n      .sweet-alert .sa-icon.sa-success::after {\n        -webkit-border-radius: 0 120px 120px 0;\n        border-radius: 0 120px 120px 0;\n        top: -11px;\n        left: 30px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 0px 60px;\n        transform-origin: 0px 60px; }\n      .sweet-alert .sa-icon.sa-success .sa-placeholder {\n        width: 80px;\n        height: 80px;\n        border: 4px solid rgba(165, 220, 134, 0.2);\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        box-sizing: content-box;\n        position: absolute;\n        left: -4px;\n        top: -4px;\n        z-index: 2; }\n      .sweet-alert .sa-icon.sa-success .sa-fix {\n        width: 5px;\n        height: 90px;\n        background-color: white;\n        position: absolute;\n        left: 28px;\n        top: 8px;\n        z-index: 1;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg); }\n      .sweet-alert .sa-icon.sa-success .sa-line {\n        height: 5px;\n        background-color: #A5DC86;\n        display: block;\n        border-radius: 2px;\n        position: absolute;\n        z-index: 2; }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n          width: 25px;\n          left: 14px;\n          top: 46px;\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg); }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n          width: 47px;\n          right: 8px;\n          top: 38px;\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg); }\n    .sweet-alert .sa-icon.sa-custom {\n      background-size: contain;\n      border-radius: 0;\n      border: none;\n      background-position: center center;\n      background-repeat: no-repeat; }\n\n/*\n * Animations\n */\n@-webkit-keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@-webkit-keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@-webkit-keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n@keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n.showSweetAlert[data-animation=pop] {\n  -webkit-animation: showSweetAlert 0.3s;\n  animation: showSweetAlert 0.3s; }\n\n.showSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.showSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideFromTop 0.3s;\n  animation: slideFromTop 0.3s; }\n\n.showSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideFromBottom 0.3s;\n  animation: slideFromBottom 0.3s; }\n\n.hideSweetAlert[data-animation=pop] {\n  -webkit-animation: hideSweetAlert 0.2s;\n  animation: hideSweetAlert 0.2s; }\n\n.hideSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.hideSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideToTop 0.4s;\n  animation: slideToTop 0.4s; }\n\n.hideSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideToBottom 0.3s;\n  animation: slideToBottom 0.3s; }\n\n@-webkit-keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@-webkit-keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n@keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n.animateSuccessTip {\n  -webkit-animation: animateSuccessTip 0.75s;\n  animation: animateSuccessTip 0.75s; }\n\n.animateSuccessLong {\n  -webkit-animation: animateSuccessLong 0.75s;\n  animation: animateSuccessLong 0.75s; }\n\n.sa-icon.sa-success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n  animation: rotatePlaceholder 4.25s ease-in; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n.animateErrorIcon {\n  -webkit-animation: animateErrorIcon 0.5s;\n  animation: animateErrorIcon 0.5s; }\n\n@-webkit-keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n@keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n.animateXMark {\n  -webkit-animation: animateXMark 0.5s;\n  animation: animateXMark 0.5s; }\n\n@-webkit-keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n@keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n.pulseWarning {\n  -webkit-animation: pulseWarning 0.75s infinite alternate;\n  animation: pulseWarning 0.75s infinite alternate; }\n\n@-webkit-keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n@keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n.pulseWarningIns {\n  -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n  animation: pulseWarningIns 0.75s infinite alternate; }\n\n@-webkit-keyframes rotate-loading {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n@keyframes rotate-loading {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n/* Internet Explorer 9 has some special quirks that are fixed here */\n/* The icons are not animated. */\n/* This file is automatically merged into sweet-alert.min.js through Gulp */\n/* Error icon */\n.sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/* Success icon */\n.sweet-alert .sa-icon.sa-success {\n  border-color: transparent\\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n.la-ball-fall,\n.la-ball-fall > div {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.la-ball-fall {\n  display: block;\n  font-size: 0;\n  color: #fff; }\n\n.la-ball-fall.la-dark {\n  color: #333; }\n\n.la-ball-fall > div {\n  display: inline-block;\n  float: none;\n  background-color: currentColor;\n  border: 0 solid currentColor; }\n\n.la-ball-fall {\n  width: 54px;\n  height: 18px; }\n\n.la-ball-fall > div {\n  width: 10px;\n  height: 10px;\n  margin: 4px;\n  border-radius: 100%;\n  opacity: 0;\n  -webkit-animation: ball-fall 1s ease-in-out infinite;\n  -moz-animation: ball-fall 1s ease-in-out infinite;\n  -o-animation: ball-fall 1s ease-in-out infinite;\n  animation: ball-fall 1s ease-in-out infinite; }\n\n.la-ball-fall > div:nth-child(1) {\n  -webkit-animation-delay: -200ms;\n  -moz-animation-delay: -200ms;\n  -o-animation-delay: -200ms;\n  animation-delay: -200ms; }\n\n.la-ball-fall > div:nth-child(2) {\n  -webkit-animation-delay: -100ms;\n  -moz-animation-delay: -100ms;\n  -o-animation-delay: -100ms;\n  animation-delay: -100ms; }\n\n.la-ball-fall > div:nth-child(3) {\n  -webkit-animation-delay: 0ms;\n  -moz-animation-delay: 0ms;\n  -o-animation-delay: 0ms;\n  animation-delay: 0ms; }\n\n.la-ball-fall.la-sm {\n  width: 26px;\n  height: 8px; }\n\n.la-ball-fall.la-sm > div {\n  width: 4px;\n  height: 4px;\n  margin: 2px; }\n\n.la-ball-fall.la-2x {\n  width: 108px;\n  height: 36px; }\n\n.la-ball-fall.la-2x > div {\n  width: 20px;\n  height: 20px;\n  margin: 8px; }\n\n.la-ball-fall.la-3x {\n  width: 162px;\n  height: 54px; }\n\n.la-ball-fall.la-3x > div {\n  width: 30px;\n  height: 30px;\n  margin: 12px; }\n\n/*\n * Animation\n */\n@-webkit-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@-moz-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -moz-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@-o-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -o-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -o-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-145%);\n    -moz-transform: translateY(-145%);\n    -o-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(145%);\n    -moz-transform: translateY(145%);\n    -o-transform: translateY(145%);\n    transform: translateY(145%); } }\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/css/templatemo-style.css",
    "content": "/*\n\nVisual Admin Template\nhttp://www.templatemo.com/preview/templatemo_455_visual_admin\n\nTABLE OF CONTENT\n\t1. Universal Styles\n\t2. Left Column\n\t3. Right Column\n\t4. Charts & Maps\n\t5. Login\n\t6. Manage Users\n\t7. Preferences\n\t8. Media Queries\n----------------------------------------------*/\n/* 1. Universal Styles\n----------------------------------------------*/\n* {\tfont-family: 'Open Sans', sans-serif; }\nbody {\tfont-size: 13px; }\nbody, .templatemo-left-nav { background: #1f2124; }\nh1, h2, h3 { margin: 0; }\nh2 { font-size: 1.6em; }\nh3 {\n\tcolor: #7f7f7f;\n\tfont-size: 1.4em;\n}\nul {\n\tlist-style-type: none;\n    margin: 0;\n    padding: 0;\n}\na:hover { text-decoration: none; }\nnav li {\n\tfont-size: 1.1em;\n\tlist-style: none;\t\n\ttext-transform: uppercase;\n}\n.templatemo-inline-block {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.templatemo-block {\tdisplay: block; }\n.templatemo-position-relative {\tposition: relative; }\n.blue-text { color: #39ADB4; }\n.white-text { color: white; }\n.green-bg {\tbackground-color: #39ADB4; }\n.yellow-bg { background-color: #D8D138; }\n.white-bg {\tbackground-color: white; }\n.white-bg .fa-times { background-color: #d7d7d7; }\n.white-bg .fa-times:hover {\tbackground: #83ccd1; }\n.orange-bg {\n\tbackground-color: #F17A54;\n\tcolor: white;\n}\n.orange-bg .fa-times {\tbackground-color: #F0A790; }\n.orange-bg .fa-times:hover { background-color: #E14311; }\n.pink-bg {\n\tbackground-color: #D7425C;\n\tcolor: white;\n}\n.pink-bg .fa-times { background-color: #E57C8F;\t}\n.pink-bg .fa-times:hover { background-color: #BD1F3B; }\n.blue-bg {\n\tbackground-color: #3275BB;\n\tcolor: white;\n}\n.blue-bg .fa-times { background-color: #6792C0; }\n.blue-bg .fa-times:hover { background-color: #2C639C; }\n.light-gray-bg { background-color: #efefef; }\n.padding-right-25 {\tpadding-right: 25px; }\n.margin-bottom-0 {\tmargin-bottom: 0; }\n.margin-bottom-5 {\tmargin-bottom: 5px; }\n.margin-bottom-10 {\tmargin-bottom: 10px; }\n.margin-bottom-30 {\tmargin-bottom: 30px; }\n.margin-bottom-70 {\tmargin-bottom: 70px; }\n.margin-right-15 { margin-right: 15px; }\n.margin-10 { margin: 10px; }\n.width-100 { width: 100%; }\n.no-border { border: none; }\n.border-radius-10 { border-radius: 10px; }\nfooter { padding: 15px; }\n\n/* 2. Left Column\n-----------------------------*/\n.templatemo-sidebar { width: 300px; }\n.square {\n\twidth: 25px;\n\theight: 25px;\n\tborder: 3px solid #13895F;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.circle {\n\twidth: 15px;\n\theight: 15px;\n\tborder-radius: 50%;\n}\n.templatemo-site-header { margin: 25px 30px; }\n.templatemo-site-header h1 {\n\tcolor: white;\n\tdisplay: inline-block;\n\tfont-size: 1.8em;\n\tfont-weight: 300;\n\tletter-spacing: 1.5px;\n\tmargin: 0 5px;\t\n\ttext-transform: uppercase;\n\tvertical-align: middle;\n}\n.profile-photo-container { position: relative; }\n.profile-photo-overlay {\n\tbackground-color: rgba(4, 152, 114, 0.35);\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: all 0.3s ease;\n}\n.profile-photo-overlay:hover { background-color: rgba(4, 152, 114, 0); }\n\n/* Search form */\n.templatemo-search-form {\n\tfont-size: 1.1em;\n\tmargin: 50px 20px;\t\t\n}\n.templatemo-search-form .input-group { width: 100%; }\n.templatemo-search-form .input-group .form-control {\n\tbackground-color: #18191b;\n\tborder: none;\n\tborder-radius: 10px;\n\tcolor: #DDD;\n\tpadding-left: 30px;\n}\n.form-control:focus {\n  border-color: #13895F;\n  outline: 0;\n  box-shadow: inset 0 1px 1px rgba(19,137,95,.075),0 0 8px rgba(19,137,95,.6);\n}\n.form-control.highlight {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n.form-control.highlight::-webkit-input-placeholder { /* WebKit browsers */\n    color:    #ccc;\n}\n.form-control.highlight:-moz-placeholder { /* Mozilla Firefox 4 to 18 */\n   color:    #ccc;\n   opacity:  1;\n}\n.form-control.highlight::-moz-placeholder { /* Mozilla Firefox 19+ */\n   color:    #ccc;\n   opacity:  1;\n}\n.form-control.highlight:-ms-input-placeholder { /* Internet Explorer 10+ */\n   color:    #ccc;\n}\n.templatemo-search-form .input-group { position: relative; }\n.fa-search {\n    height:32px;\n    width:32px;\n    border: none;\n    cursor: pointer;\n    color:white;\n    background:transparent;\n    position:absolute;\n    top: 0;\n\tleft: 0;\n\tz-index: 100;\n}\n.mobile-menu-icon { \n\tcursor:pointer;\n\tdisplay:none; \n}\n.templatemo-left-nav li { font-weight: 300; }\n.templatemo-left-nav a.active,\n.templatemo-left-nav a:hover {\n\tbackground: #18191b;\n\tborder-left: 8px solid #13895F;\n}\n.templatemo-left-nav a {\n\tcolor: #e9e9ea;\n\tdisplay: block;\n\tpadding: 30px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-left-nav .fa { margin-right: 15px; }\n\n/* 3. Right Column\n------------------------------*/\n.templatemo-top-nav-container {\n\tbackground-color: white;\n\tpadding: 28px 50px;\n \tbox-shadow: 0px 0px 2px 2px rgba(161, 159, 159, 0.18);\n}\n.templatemo-top-nav li {\n    float: left;\n    list-style: none;\n}\n.templatemo-top-nav a {\n\tcolor: #7f7f7f;\n    display: block;\n    padding: 0 50px;\n    border-left: 2px solid #c5c5c5;\n}\n.templatemo-top-nav li:last-child a { border-right: 2px solid #c5c5c5; }\n.templatemo-top-nav a:hover,\n.templatemo-top-nav a.active {\n\tcolor: #39ADB4;\n}\n\n/* Main Content Area */\n.templatemo-content {\n  margin-top: 0px;\n  min-height: 600px;\n  padding: 0;  \n  overflow-x: hidden;\n}\n.templatemo-content-container {\tpadding: 40px 50px; }\n.templatemo-flex-row {\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n}\n.col-1 {\n\t-webkit-flex: 1;\n\t    -ms-flex: 1;\n\t        flex: 1;\n}\n.col-2 {\n\t-webkit-flex: 2;\n\t    -ms-flex: 2;\n\t        flex: 2;\n}\n\n/* Content Widget */\n.templatemo-content-widget {\n\tborder-radius: 10px;\n\tpadding: 30px;\t\n\tposition: relative;\n\tmargin: 10px;\n \tbox-shadow: 0px 0px 1px 1px rgba(161, 159, 159, 0.1);\n}\n.templatemo-content-widget.no-padding {\tpadding: 0; }\n.fa-times {\n\tborder-radius: 15px;\n  \tcolor: white;\n  \tcursor: pointer;\n\tpadding: 4px 5px;\n  \tposition: absolute;\n  \ttop: 15px;\n  \tright: 15px;\n  \tz-index: 100;\n  \ttransition: all 0.3s ease;\n}\n.fa-heart {\n  color: white;\n  cursor: pointer;\n  font-size: 1.4em;\n  position: absolute;\n  top: 30px;\n  right: 30px;\n  z-index: 100;\n  transition: all 0.3s ease;\n}\n.fa-heart:hover { color: #39ADB4; }\n.progress {\tdisplay: block; }\n.panel-default>.panel-heading {\n\tbackground-color: #39ADB4;\n\tborder-top-left-radius: 10px;\n\tborder-top-right-radius: 10px;\n\tcolor: white;\n\tpadding: 15px;\n}\n.panel-default .fa-times {\n\ttop: 12px;\n\tbackground-color: #67B5B9;\n}\n.panel-default .fa-times:hover { background-color: #297B7F;\t}\n.panel { border-radius: 10px; }\n.pagination-wrap {\n\tmargin-right: 10px;\n\ttext-align: right;\n}\n.pagination>li>a {\n\tborder-color: #E9E8E8;\n\tcolor: #a6a6a6;\n\tmargin: 2px;\n\tpadding: 10px;\t\n}\n.pagination>li>a,\n.pagination>li:first-child>a,\n.pagination>li:last-child>a {\n\tborder-radius: 10px;\n}\n.pagination>.active>a, \n.pagination>.active>a:focus, \n.pagination>.active>a:hover {\n\tbackground-color: #39ADB4;\n\tborder-color: #E9E8E8;\n}\n.table { margin-bottom: 0; }\n.table>tbody>tr>td { padding: 10px 15px; }\n.table>thead>tr>td { padding: 15px; }\n.media { margin-top: 0; }\n.media-body { vertical-align: middle; }\n.badge {\n\tbackground-color: #d6973d;\n\tborder-radius: 5px;\n\tmargin-left: 5px;\n\tpadding: 5px 10px;\n\tvertical-align: top;\n}\n.templatemo-img-bordered {\n\tborder: 1px solid #ccc;\n\tpadding: 3px;\n}\n\n/* 4. Charts & Maps - http://codepen.io/shoogledesigns/pen/BfLkA\n----------------------------------------------------------------*/\n.templatemo-chart {\n\twidth: 100%;\n\theight: 300px;\n}\n#timeline_div {\theight: auto; }\n\n/* JQVMap */\n.jqvmap-zoomin, .jqvmap-zoomout {\n    width: 15px;\n    height: 15px;\n}\n.vmap { height: 300px; }\n\n/* 5. Login\n------------------------------*/\n.templatemo-login-widget {\n\tmax-width: 450px;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tpadding: 50px;\n}\n.templatemo-login-widget .square {\n\twidth: 18px;\n\theight: 18px;\n}\n.templatemo-login-widget header { margin-bottom: 40px; }\n.templatemo-login-widget h1 {\n\tdisplay: inline-block;\n\tfont-size: 1.8em;\n\ttext-align: center;\n\ttext-transform: uppercase;\n\tvertical-align: middle;\n}\n.templatemo-login-form .form-group { margin-bottom: 20px; }\n.templatemo-login-form .form-group:last-child {\tmargin-bottom: 0; }\n.input-group-addon { background: none; }\n.btn-primary {\n\tborder-radius: 2px;\n\tbackground-color: #39ADB4;\n\tborder: none;\t\n\tcolor: white;\t\n}\n.btn-primary:hover { background-color: #2A858B; }\n.templatemo-blue-button, \n.templatemo-white-button {\n\tborder-radius: 2px;\n\tpadding: 10px 30px;\n\ttext-transform: uppercase;\n\ttransition: all 0.3s ease;\n}\n.templatemo-blue-button {\n\tbackground-color: #39ADB4;\n\tborder: none;\t\n\tcolor: white;\t\n}\n.templatemo-blue-button:hover {\tbackground-color: #2A858B; }\n.templatemo-white-button {\n\tbackground-color: white;\n\tborder: 1px solid #39ADB4;\t\n\tcolor: #39ADB4;\t\n}\n.templatemo-white-button:hover { background-color: #eff2f3;\t}\n.templatemo-register-widget {\n\tmax-width: 450px;\n\tpadding: 15px;\n\ttext-align: center;\n}\n.templatemo-register-widget p {\tmargin-bottom: 0; }\n.checkbox label { padding-left: 0; }\n.font-weight-400 { font-weight: 400; }\n\n/* Style checkboxes and radio buttons\nhttp://webdesign.tutsplus.com/tutorials/quick-tip-easy-css3-checkboxes-and-radio-buttons--webdesign-8953 */\ninput[type=\"checkbox\"] {  display:none; }\ninput[type=\"checkbox\"] + label span {\n    display:inline-block;\n    width:26px;\n    height:25px;\n    margin:-1px 4px 0 0;\n    vertical-align:middle;\n    background:url(../image/checkbox-radio-sheet.png) left top no-repeat;\n    cursor:pointer;\n}\ninput[type=\"checkbox\"]:checked + label span {\n    background:url(../image/checkbox-radio-sheet.png) -26px top no-repeat;\n}\ninput[type=\"radio\"] { display:none; }\ninput[type=\"radio\"] + label span {\n    display:inline-block;\n    width:26px;\n    height:25px;\n    margin:-1px 4px 0 0;\n    vertical-align:middle;\n    background:url(../image/checkbox-radio-sheet.png) -52px top no-repeat;\n    cursor:pointer;\n}\ninput[type=\"radio\"]:checked + label span {\n    background:url(../image/checkbox-radio-sheet.png) -78px top no-repeat;\n}\n\n/* 6. Manage Users\n------------------------------*/\n.templatemo-sort-by:hover {\tcolor: #ded9d9; }\n.templatemo-edit-btn {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: black;\n    background: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-edit-btn:hover {\n\tbackground-color: #39ADB4;\n\tborder: 1px solid #39ADB4;\n\tcolor: white;\n}\n\n.templatemo-activity-btn {\n    border: 1px solid #ddd;\n    border-radius: 3px;\n    color: black;\n    background: white;\n    padding: 5px 15px;\n    transition: all 0.3s ease;\n}\n.templatemo-activity-btn:hover {\n    background-color: #39ADB4;\n    border: 1px solid #39ADB4;\n    color: white;\n}\n\n.description {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: black;\n\tbackground: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.description {\n\tbackground-color: #39ADB4;\n\tborder: 1px solid #39ADB4;\n\tcolor: white;\n}\n\n.templatemo-delete-btn {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: red;\n    background: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-delete-btn:hover {\n\tbackground-color: red;\n\tborder: 1px solid red;\n\tcolor: white;\n}\n\n.templatemo-link { color: #607D8B; }\n.templatemo-link:hover { color: #39ADB4; }\n.templatemo-overflow-hidden { overflow: hidden; }\n.templatemo-user-table thead {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n.panel>.table-responsive:last-child>.table:last-child, .panel>.table:last-child {\n  border-bottom-right-radius: 10px;\n  border-bottom-left-radius: 10px;\n}\n.panel>.table:first-child {\n  border-top-left-radius: 10px;\n  border-top-right-radius: 10px;\n}\n.templatemo-social-icons-container {\n\tbackground-color: #f4f3f3;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-justify-content: space-between;\n\t    -ms-flex-pack: justify;\n\t        justify-content: space-between;\n\tbox-shadow: 0px 0px 1px 1px rgba(161, 159, 159, 0.1);\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 50px;\n\tborder-bottom-left-radius: 10px;\n\tborder-bottom-right-radius: 10px;\n\tborder-top: 1px solid #dedede;\n}\n.social-icon-wrap {\n\twidth: 33%;\n\theight: 100%;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-align-items: center;\n\t    -ms-flex-align: center;\n\t        align-items: center;\n\t-webkit-justify-content: center;\n\t    -ms-flex-pack: center;\n\t        justify-content: center;\n}\n.social-icon-wrap:nth-child(2) {\n\tborder-left: 1px solid #dedede;\n\tborder-right: 1px solid #dedede;\n}\n.templatemo-social-icon {\n\tbackground-color: #a6a6a6;\n\tborder-radius: 50%;\n\tcolor: white;\n\tcursor: pointer;\n\tfont-size: 1.5em;\n\tpadding-top: 8px;\n\twidth: 35px;\n\theight: 35px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-social-icon:hover {\tbackground-color: #39ADB4; }\n.templatemo-content-img-bg {\n\tbackground-position: center;\n\tbackground-attachment: stretch;\n\tmin-height: 300px;\n}\n.content-bg-img {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tborder-radius: 10px;\n\twidth: 100%;\n\theight: 100%;\n}\n.view-img-btn-wrap {\n\tposition: absolute;\n\tbottom: 50px;\n\tleft: 0;\n\twidth: 100%;\n\ttext-align: center;\n}\n.templatemo-view-img-btn {\n\tbackground-color: #f4f3f3;\t\n\tborder: none;\n\tborder-radius: 5px;\n\tcolor: #a6a6a6;\n\tpadding: 10px 50px;\n\ttext-transform: uppercase;\n\ttransition: all 0.3s ease;\n}\n.templatemo-view-img-btn:hover {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n\n/* 7. Preferences\n-------------------------------*/\n.has-success .checkbox, .has-success .checkbox-inline, .has-success .control-label, .has-success .help-block, \n.has-success .radio, .has-success .radio-inline, .has-success.checkbox label, .has-success.checkbox-inline label, \n.has-success.radio label, .has-success.radio-inline label {\n\tcolor: #13895F;\n}\n.has-success .form-control { border-color: #13895F; }\n.has-warning .checkbox, .has-warning .checkbox-inline, .has-warning .control-label, .has-warning .help-block, \n.has-warning .radio, .has-warning .radio-inline, .has-warning.checkbox label, .has-warning.checkbox-inline label, \n.has-warning.radio label, .has-warning.radio-inline label {\n\tcolor: #CF922C;\n}\n.has-warning .form-control { border-color: #CF922C; }\n.has-error .checkbox, .has-error .checkbox-inline, .has-error .control-label, .has-error .help-block, \n.has-error .radio, .has-error .radio-inline, .has-error.checkbox label, .has-error.checkbox-inline label, \n.has-error.radio label, .has-error.radio-inline label {\n\tcolor: #D7425C;\n}\n.has-error .form-control { border-color: #D7425C; }\n.templatemo-multi-select {\n\tmin-width: 200px;\n\theight: 100px;\n\toverflow-y: scroll;\t\n}\n\n/* 8. Media Queries\n------------------------------*/\n@media screen and (max-width: 1199px) and (min-width: 991px) {\n\t.templatemo-site-header { margin: 25px; }\n\t.templatemo-sidebar { width: 250px;\t}\n\t.templatemo-search-form { margin: 20px; }\n\tnav li { font-size: 1em; }\n\t.templatemo-left-nav a { padding: 15px; }\n\t.templatemo-top-nav a { padding: 0 30px; }\n}\n\n@media screen and (max-width: 1199px) {\n\t.templatemo-flex-row.flex-content-row { display: block;\t}\n}\n\n@media screen and (max-width: 992px) and (min-width: 768px) {\n\t.templatemo-site-header,\n\t.templatemo-search-form { \n\t\tmargin: 15px; \n\t}\n\t.templatemo-sidebar { width: 200px; } \n\t.templatemo-site-header h1 { font-size: 1.6em; }\n\t.square { \n\t\twidth: 20px; \n\t\theight: 20px;\n\t}\n\t.templatemo-left-nav a.active,\n\t.templatemo-left-nav a:hover {\n\t\tborder-left: 6px solid #13895F;\t\t\n\t}\t\n\t.templatemo-top-nav-container {\tpadding: 17px 30px;\t}\n\t.templatemo-top-nav a { padding: 0 15px; }\n}\n\n@media screen and (max-width: 992px) {\n\tnav li { font-size: 1em; }\n\t.templatemo-left-nav a { padding: 15px 10px; }\t\n\t.templatemo-content-container {\tpadding: 10px; }\n}\n@media only screen and (min-width: 768px) {\n\t.templatemo-left-nav {\tdisplay: block !important; }\n}\n@media screen and (max-width: 767px) {\n\t.templatemo-flex-row { display: block; }\n\t.templatemo-site-header { margin: 20px 15px; }\n\t.profile-photo-container {\tdisplay: none; /* Hide profile photo on mobile view */\t}\n\t.templatemo-search-form { margin: 10px; }\n\t.templatemo-top-nav-container {\tpadding: 10px; }\n\t.templatemo-top-nav a { \n\t\tborder-left: 1px solid #c5c5c5;\n\t\tpadding: 0 7px; \n\t}\n\t.templatemo-top-nav li:last-child a { border-right: 1px solid #c5c5c5; }\n\t.templatemo-content-widget { padding: 15px;\t}\n\n\t/* Left column */\n\t.templatemo-left-nav {\n\t\tdisplay: none;\n\t\tposition: fixed;\n\t\ttop: 10px;\n\t\tright: 50px;\t\t\n\t\theight: 300px;\n\t\toverflow: auto;\n\t\twidth: 200px;\n\t\tz-index: 999;\n\t}\n\t.templatemo-left-nav a.active, \n\t.templatemo-left-nav a:hover {\n\t\tborder-left: 4px solid #13895F;\t\n\t}\n\t.mobile-menu-icon {\n\t\tcursor: pointer;\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\ttop: 10px;\n\t\tright: 10px;\n\t\tz-index: 1000;\n\t}\n\t.mobile-menu-icon:hover .fa { background-color: rgba(19,137,95,0.8); }\n\t.mobile-menu-icon .fa {\n\t\tcolor: #fff;\n\t\tbackground-color: rgba(19,137,95,0.4);\n\t\tfont-size: 1.5em;\n\t\twidth: 40px;\n\t\theight: 40px;\n\t\tpadding-top: 9px;\n\t\tpadding-left: 11px;\n\t}\n}\n\n.error-msg {\n\tcolor: #f30404 !important;\n\tfloat: right !important;\n}\n\n.page-info {\n\tfloat: left !important;\n\tmargin: 30px;\n}\n\n.li-none {\n    display: none !important;\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/address.js",
    "content": "$(document).ready(function (){\n    var addresId;\n    $(\"[name='changeAddr']\").click(function (){\n        $(\"#update-addr\").modal({\n            backdrop:'static'\n        });\n\n        $(\"#name\").val($(this).parents(\"#parent\").find(\"#conname\").text());\n        $(\"#telephone\").val($(this).parents(\"#parent\").find(\"#contel\").text());\n        $(\"#detailaddress\").val($(this).parents(\"#parent\").find(\"#detailaddr\").text());\n         addresId=$(this).parents(\"#parent\").find(\"#table\").attr(\"address-id\");\n\n    });\n\n\n    $(\"#saveAddr\").click(function (){\n        var saveAddr={};\n        saveAddr.addressid=addresId;\n         saveAddr.province=$(\"#provinceUpdate\").val();\n         saveAddr.city=$(\"#cityUpdate\").val();\n         saveAddr.county=$(\"#countyUpdate\").val();\n         saveAddr.detailaddr=$(\"#detailaddress\").val();\n         saveAddr.conname=$(\"#name\").val();\n         saveAddr.contel=$(\"#telephone\").val();\n\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/saveAddr\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:saveAddr,\n            dateType:\"json\",\n            success: function(result){\n                if (result.msg==\"更新失败\")\n                {\n                    swal(result.msg);\n                }\n                else {\n                    $(\"#update-info\").modal('hide');\n                    swal(\"修改成功\", \"\", \"success\");\n                    $(\"button\").click(function (){\n                        location.reload();\n                    });\n                }\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    });\n\n    $(\"[name='deleteAddr']\").click(function (){\n        addresId=$(this).parents(\"#parent\").find(\"#table\").attr(\"address-id\");\n        var address={};\n        address.addressid=addresId;\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/deleteAddr\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:address,\n            dateType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"删除失败\");\n            }\n            });\n    });\n\n    $(\"[name='insertAddr']\").click(function () {\n        $(\"#insert-addr\").modal({\n            backdrop:'static'\n        });\n    });\n\n    $(\"#insertAddr\").click(function (){\n        var insertAddr={};\n        insertAddr.addressid={};\n        insertAddr.userid={};\n       insertAddr.province=$(\"#provinceInsert\").val();\n       insertAddr.city=$(\"#cityInsert\").val();\n        insertAddr.county=$(\"#countyInsert\").val();\n        insertAddr.detailaddr=$(\"#detailaddressInsert\").val();\n        insertAddr.conname=$(\"#nameInsert\").val();\n       insertAddr.contel=$(\"#telephoneInsert\").val();\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/insertAddr\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:insertAddr,\n           dataType:\"json\",\n           success:function (result){\n               swal(result.msg);\n               $(\"button\").click(function (){\n                   location.reload();\n               });\n           },\n           error:function (){\n               alert(\"添加失败\");\n           }\n       });\n\n    });\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/adminchat.js",
    "content": "\nvar client;\nvar clientID;\n$(window).on('beforeunload',function(){\n    client=null;\n    window.opener.document.getElementById(\"flag\").value=\"0\";\n});\n$(document).ready(function() {\n    clientID=$('#sendId').text();\n    client = new Messaging.Client('127.0.0.1',61614,clientID);\n    client.onConnectionLost = function(){\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function(message){\n\n        var userid = $(\"#receiveId\").text();\n        clientID = $('#sendId').text();\n        var msgObj=jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to===clientID&&msgObj.from===userid){\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n            /!*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*!/\n        }\n    };\n    //建立连接和订阅\n    client.connect({onSuccess:function(){\n        //订阅topic\n        client.subscribe(\"topic\");\n        // alert(\"连接成功\");\n    }});\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function() {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID=$('#sendId').text();\n            var msg={};\n            msg.from=clientID;\n            msg.to=$('#receiveId').text();\n            msg.body=message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function(request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function(data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n\n        }\n    });\n\n    //回车\n    $(document).keypress(function(e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function() {\n        $('.a-card').css(\"background\",\"#FFFFFF\")\n        $(this).css(\"background\",\"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function(request) {\n                alert(\"保存消息失败\");\n            },\n            success: function(result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n\n    $('.chat-list').hover(function() {\n        $(this).css(\"overflow-y\",\"auto\");\n    }, function() {\n        $(this).css(\"overflow-y\",\"hidden\");\n    });\n\n});\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index,item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n*/\n\n\nvar client;\nvar clientID;\n$(window).on('beforeunload', function () {\n    client = null;\n    window.opener.document.getElementById(\"flag\").value = \"0\";\n});\n$(document).ready(function () {\n\n    console.log(getChatList(2));\n    reGetChatUser($(\"#receiveId\").text());\n\n    clientID = $('#sendId').text();\n    client = new Messaging.Client('127.0.0.1', 61614, clientID);\n    client.onConnectionLost = function () {\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function (message) {\n        clientID = $('#sendId').text();\n        var userid = $(\"#receiveId\").text();\n        var msgObj = jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to === clientID && msgObj.from === userid) {\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n            /*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*/\n        } else if (msgObj.to === clientID && !getChatList(msgObj.from)) {\n            //重新获取聊天列表\n            reGetChatUser(msgObj.from);\n            // reGetChatUser(null);\n            /* var chatlistitem = '<a class=\"a-card\" data-userid=\"' + msgObj.from + '\"> <div class=\"card\">' + msgObj.from + '</div> </a>';\n             $('.a-far').prepend(chatlistitem);*/\n        }\n    };\n    //建立连接和订阅\n    client.connect({\n        onSuccess: function () {\n            //订阅topic\n            client.subscribe(\"topic\");\n            // alert(\"连接成功\");\n        }\n    });\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function () {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID = $('#sendId').text();\n            var msg = {};\n            msg.from = clientID;\n            msg.to = $('#receiveId').text();\n            msg.body = message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function (request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function (data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n            var receive = $(\"#receiveId\").text();\n            /*$.post(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             });\n             receive();\n             refreshList();*/\n            /*$.get(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             },\n             function(data,status){\n             alert(\"数据: \\n\" + data + \"\\n状态: \" + status);\n             });*/\n        }\n    });\n\n    //回车\n    $(document).keypress(function (e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function () {\n        $('.a-card').css(\"background\", \"#FFFFFF\")\n        $(this).css(\"background\", \"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function (request) {\n                alert(\"保存消息失败\");\n            },\n            success: function (result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n    /*function hitList(){\n     $('.list-item').css(\"background\",\"#FAFAFA\");\n     $(this).css(\"background\",\"#EBEBEC\");\n     var name = $(this).children(\"#user-name\").text();\n     var number = $(this).children(\"#user-no\").text();\n     $(\"#receive\").text(name);\n     $(\"#receiveId\").text(number);\n\n     }*/\n\n    $('.chat-list').hover(function () {\n        $(this).css(\"overflow-y\", \"auto\");\n    }, function () {\n        $(this).css(\"overflow-y\", \"hidden\");\n    });\n    //refreshList();\n\n});\n\nfunction userListClick() {\n\n    //发异步请求查聊天消息\n    $.ajax({\n        url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            senduser: $(\"#sendId\").text(),\n            receiveuser: $(\"#receiveId\").text(),\n        },\n        error: function (request) {\n            alert(\"保存消息失败\");\n        },\n        success: function (result) {\n            $('.chat-content-body').empty();\n            showMessage(result.info.message);\n            // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n        }\n    });\n}\n\n/*function receive(){\n var sendUser = $('#receiveId').text();\n $.post(\"servlet/ReceiveServlet\", {\n sendId: sendUser,\n },\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n $(\".chat-content-body\").html('');\n for (var i = 0; i < data.length; i++) {\n showMessage(data[i].User1,data[i].MsgContent);\n }\n },\"json\");\n }*/\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index, item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n//获取所有聊天列表\nfunction getChatList(id) {\n    var chatList = [];\n    $('.a-far>a').each(function () {\n        chatList.push($(this).attr(\"data-userid\"));\n    });\n    console.log(chatList);\n    for (var i = 0; i < chatList.length; i++) {\n        if (chatList[i] == id) {\n            return true;\n        }\n    }\n    return false;\n\n    /*$('.a-far').children().each(function(index,item){\n     alert(item.attr(\"data-userid\"));\n     })*/\n\n}\n\n//重新获取列表\nfunction reGetChatUser(sendto) {\n    $.ajax({\n        url: \"/shop/adminchat/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            sendto: sendto\n        },\n        error: function (request) {\n            alert(result.msg);\n        },\n        success: function (result) {\n            $('.a-far').empty();\n            showChatList(result.info.userlist);\n        }\n    });\n}\n\nfunction showChatList(userlist) {\n    $.each(userlist, function (index, item) {\n        var chatlistitemA = $(\"<a></a>\").addClass(\"a-card\").attr(\"data-userid\", item.userid).attr(\"data-username\", item.username);\n        var chatlistitem = chatlistitemA.addClass(\"card\").append(item.username);\n        chatlistitemA.click(function () {\n            $('.a-card').css(\"background\", \"#FFFFFF\")\n            $(this).css(\"background\", \"#F8F8F8\");\n            var userid = $(this).attr(\"data-userid\");\n            // var username = $(this).children(\".card\").text();\n            var username = $(this).attr(\"data-username\");\n            $(\"#receive\").text(username);\n            $(\"#receiveId\").text(userid);\n            userListClick();\n        });\n\n        /* <div class=\"card\">' + item.username + '</div>\n         *!/*/\n        $('.a-far').prepend(chatlistitem);\n    });\n}\n\n\n/*\n function refreshList() {\n $.post(\"servlet/RefreshServlet\",\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n //$(\".chat-list\").html('');\n for (var i = 0; i < data.length; i++) {\n // showList(data[i].UserId,data[i].Name);\n $('#list-item'+i).children(\"#user-name\").text(data[i].Name);\n $('#list-item'+i).children(\"#user-no\").text(data[i].UserId);\n $('#list-item'+i).css(\"display\",\"block\");\n }\n },\"json\");\n }\n\n function showList(id,name) {\n var item = '<div class=\"list-item\"><h3 id=\"user-name\">'+name+'</h3><span id=\"user-no\">'+id+'</span></div>';\n $('.chat-list').append(item);\n }*/\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/categery.js",
    "content": "$(document).ready(function (){\n    var cateId={};\n\n   $(\"[name='changCate']\") .click(function (){\n       $(\"#update-cate\").modal({\n           backdrop:'static'\n       });\n       $(\"#categoryName\").val($(this).parent().prev().children().text());\n       cateId=$(this).parent().prev().children().attr(\"cateId\");\n   });\n\n   $(\"#saveCatename\").click(function (){\n       var category={};\n       category.cateid=cateId;\n       category.catename=$(\"#categoryName\").val();\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/admin/goods/saveCate\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:category,\n           dataType:\"json\",\n           success:function (result){\n               if (result.msg==\"名字已经存在\")\n               {\n                   swal(result.msg);\n               }\n               else {\n                   swal(result.msg);\n                   $(\"button\").click(function (){\n                       location.reload();\n                   });\n               }\n           },\n           error:function (){\n               alert(\"更新失败\");\n           }\n       });\n   })\n    $(\"[name='deleteCate']\").click(function (){\n        var category={};\n        category.cateid=$(this).parent().prev().prev().children().attr(\"cateId\");\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/admin/goods/deleteCate\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:category,\n            dataType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    })\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/detail.js",
    "content": "/*\n  本网站效果由昆明天度网络IRIS原创制作，未经同意不得转载\n  商城用商品展示放大镜效果\n*/\njQuery.ljsGlasses = {\n    pcGlasses:function(_obj){\n\t\tvar _box = $(\"#\"+_obj.boxid);\n\t\tvar _sum = $(\"#\"+_obj.sumid);\n\t\tvar _last,_next;\n\t\tvar _imgarr = _box.find(\"img\");\n\t\tvar _length = _imgarr.length;\n\t\tvar _index = 0;\n\t\tvar _arr = new Array();\n\t\t_sum.append(\"<p style='position:absolute;left:0;top:0;'></p>\");\n\t\tvar _sumbox = _sum.find(\"p\");\n\t\t\n\t\tfor(var i=0;i<_length;i++){\n\t\t\t_arr[i] = new Array();\n\t\t\t_arr[i][0] = _imgarr.eq(i).attr(\"src\");\n\t\t\t_arr[i][1] = _imgarr.eq(i).attr(\"width\");\n\t\t\t_arr[i][2] = _imgarr.eq(i).attr(\"height\");\n\t\t\tvar _scale = _arr[i][1]/_arr[i][2];\n\t\t\tif(_scale == 1){\n\t\t\t\t_arr[i][3] = _obj.boxw;//width\n\t\t\t\t_arr[i][4] = _obj.boxh;//height\n\t\t\t\t_arr[i][5] = 0;//top\n\t\t\t\t_arr[i][6] = 0;//left\n\t\t\t\t_arr[i][7] = _obj.boxw/2;\n\t\t\t\t_arr[i][8] = _obj.boxw*2;//width\n\t\t\t\t_arr[i][9] = _obj.boxh*2;//height\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' width='\"+_obj.sumw+\"' height='\"+_obj.sumh+\"' /></span>\");\n\t\t\t\t}\n\t\t\tif(_scale > 1){\n\t\t\t\t_arr[i][3] = _obj.boxw;//width\n\t\t\t\t_arr[i][4] = _obj.boxw/_scale;\n\t\t\t\t_arr[i][5] = (_obj.boxh-_arr[i][4])/2;\n\t\t\t\t_arr[i][6] = 0;//left\n\t\t\t\t_arr[i][7] = _arr[i][4]/2;\n\t\t\t\t_arr[i][8] = _obj.boxh*2*_scale;//width\n\t\t\t\t_arr[i][9] = _obj.boxh*2;//height\n\t\t\t\tvar _place = _obj.sumh - (_obj.sumw/_scale);\n\t\t\t\t_place = _place/2;\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' width='\"+_obj.sumw+\"' style='top:\"+_place+\"px;' /></span>\");\n\t\t\t\t}\n\t\t\tif(_scale < 1){\n\t\t\t\t_arr[i][3] = _obj.boxh*_scale;//width\n\t\t\t\t_arr[i][4] = _obj.boxh;//height\n\t\t\t\t_arr[i][5] = 0;//top\n\t\t\t\t_arr[i][6] = (_obj.boxw-_arr[i][3])/2;\n\t\t\t\t_arr[i][7] = _arr[i][3]/2;\n\t\t\t\t_arr[i][8] = _obj.boxw*2;//width\n\t\t\t\t_arr[i][9] = _obj.boxw*2/_scale;\n\t\t\t\tvar _place = _obj.sumw - (_obj.sumh*_scale);\n\t\t\t\t_place = _place/2;\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' height='\"+_obj.sumh+\"' style='left:\"+_place+\"px;' /></span>\");\n\t\t\t\t}\n\t\t}\n\t\t_imgarr.remove();\n\t\t\n\t\t_sum.append(\"<div style='clear:both;width:100%;'></div>\");\n\t\tvar _sumarr = _sum.find(\"span\");\n\t\tvar _sumimg = _sum.find(\"img\");\n\t\t_sumarr.eq(_index).addClass(_obj.sumsel);\n\t\tvar _border = _obj.sumborder*2 + _obj.sumh;\n\t\tvar _sumwidth = (_border+_obj.sumi)*_obj.sums;\n\t\tvar _sumboxwidth = (_border+_obj.sumi)*_length;\n\t\t_sum.css({\n\t\t\t\"overflow\":\"hidden\",\n\t\t\t\"height\":_border+\"px\",\n\t\t\t\"width\":_sumwidth+\"px\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t_sumbox.css({\n\t\t\t\"width\":_sumboxwidth+\"px\"\n\t\t\t});\n\t\t_sumarr.css({\n\t\t\t\"float\":\"left\",\n\t\t\t\"margin-left\":_obj.sumi+\"px\",\n\t\t\t\"width\":_obj.sumw+\"px\",\n\t\t\t\"height\":_obj.sumh+\"px\",\n\t\t\t\"overflow\":\"hidden\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t_sumimg.css({\n\t\t\t\"max-width\":\"100%\",\n\t\t\t\"max-height\":\"100%\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t\n\t\t_box.append(\"<div style='position:relative;'><b style='display:block;'><img style='display:block;' src='' /></b><span style='position:absolute;left:0;top:0;display:none;z-index:5;'></span></div><p style='position:absolute;overflow:hidden;top:0;display:none;'><img style='max-width:none;max-height:none;position:relative;left:0;top:0;' src='' /></p>\");\n\t\tvar _glass = _box.find(\"span\");\n\t\tvar _boximg = _box.find(\"b img\");\n\t\tvar _imgout = _box.find(\"div\");\n\t\tvar _showbox = _box.find(\"p\");\n\t\tvar _showimg = _box.find(\"p img\");\n\n\t\t_box.css({\n\t\t\t\"width\":_obj.boxw+\"px\",\n\t\t\t\"height\":_obj.boxh+\"px\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\tvar _showboxleft = _obj.boxw + 10;\n\t\t_showbox.css({\n\t\t\t\"width\":_obj.boxw+\"px\",\n\t\t\t\"height\":_obj.boxh+\"px\",\n\t\t\t\"left\":_showboxleft+\"px\"\n\t\t\t});\n\t\t\n\t\tvar imgPlaces = function(){\n\t\t\t_showimg.attr(\"src\",_arr[_index][0]);\n\t\t\t_boximg.attr(\"src\",_arr[_index][0]);\n\t\t\t_boximg.css({\n\t\t\t    \"width\":_arr[_index][3]+\"px\",\n\t\t\t    \"height\":_arr[_index][4]+\"px\"\n\t\t\t});\n\t\t\t_imgout.css({\n\t\t\t\t\"width\":_arr[_index][3]+\"px\",\n\t\t\t    \"height\":_arr[_index][4]+\"px\",\n\t\t\t    \"top\":_arr[_index][5]+\"px\",\n\t\t\t    \"left\":_arr[_index][6]+\"px\",\n\t\t\t    \"position\":\"relative\"\n\t\t\t});\n\t\t\t_glass.css({\n\t\t\t    \"width\":_arr[_index][7]+\"px\",\n\t\t\t    \"height\":_arr[_index][7]+\"px\"\n\t\t\t});\n\t\t\t_showimg.css({\n\t\t\t\t\"width\":_arr[_index][8]+\"px\",\n\t\t\t    \"height\":_arr[_index][9]+\"px\"\n\t\t\t});\n\t\t\t\n\t\t};\n\t\timgPlaces();\n\t\t\n\t\t_imgout.mousemove(function(e){\n\t\t\tvar _gl_w = _glass.width()/2;\n\t\t\tvar _maxX = _imgout.width() - _gl_w;\n\t\t\tvar _maxY = _imgout.height() - _gl_w;\n\t\t\tvar _moveX = 0,_moveY = 0;\n\t\t\tvar _nowX = e.pageX - _imgout.offset().left;\n\t\t    var _nowY = e.pageY - _imgout.offset().top;\n\t\t\tvar _moveX = _nowX-_gl_w,_moveY = _nowY-_gl_w;\n\t\t\t\n\t\t\tif(_nowX <= _gl_w){ _moveX = 0; }\n\t\t\tif(_nowX >= _maxX){ _moveX = _maxX-_gl_w; }\n\t\t\tif(_nowY <= _gl_w){ _moveY = 0;}\n\t\t\tif(_nowY >= _maxY){ _moveY = _maxY-_gl_w;}\n\t\t\t_glass.css({\"left\":_moveX+\"px\",\"top\":_moveY+\"px\"});\n\n\t\t\tvar _imgX = -_moveX*_showbox.width()/_glass.width();\n\t\t\tvar _imgY = -_moveY*_showbox.width()/_glass.width();\n\t\t\t_showimg.css({\"left\":_imgX+\"px\",\"top\":_imgY+\"px\"});\n\t\n\t\t});//mouse END\n\t\t\n\t\t_imgout.mouseenter(function(){\n\t\t\t_glass.css(\"display\",\"block\");\n\t\t\t_showbox.css(\"display\",\"block\");\n\t\t\t});\n\t\t_imgout.mouseleave(function(){\n\t\t\t_glass.css(\"display\",\"none\");\n\t\t\t_showbox.css(\"display\",\"none\");\n\t\t\t});\n\t\t\n\t\t//列表部分\n\t\tvar _nextbtn = $(\"#\"+_obj.nextid);\n\t\tvar _lastbtn = $(\"#\"+_obj.lastid);\n\t\tvar _moveindex = 0;//索引移动\n\t\t\n\t\tvar _sumListMove = function(){\n\t\t\tvar _leftmove = -_moveindex*(_border+_obj.sumi);\n\t\t\tif(_sumbox.is(\":animated\")){_sumbox.stop(true,true);}\n\t\t\t_sumbox.animate({left:_leftmove+\"px\"},300);\n\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\timgPlaces();\n\t\t};//fun END\n\t\t\n\t\tif(_length <= _obj.sums){\n\t\t\tvar _place = (_obj.sums-_length)*_border/2;\n\t\t\t_sumbox.css(\"left\",_place+\"px\");\n\t\t\t_nextbtn.click(function(){\n\t\t\t\t_index++;\n\t\t\t\tif(_index >= _length){ _index=_length-1;}\n\t\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\t    imgPlaces();\n\t\t\t});\n\t\t\t_lastbtn.click(function(){\n\t\t\t\t_index--;\n\t\t\t\tif(_index <= 0){ _index=0;}\n\t\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\t    imgPlaces();\n\t\t\t});\n\t\t}else{\n\t\t\tvar _maxNum = _length-_obj.sums;\n\t\t\t_nextbtn.click(function(){\n\t\t\t   _moveindex++;\n\t\t\t   if(_moveindex >= _maxNum){ _moveindex=_maxNum; }\n\t\t\t   if(_index <= _moveindex){ _index=_moveindex;}\n\t\t\t   _sumListMove();\n\t\t    });\n\t\t\t_lastbtn.click(function(){\n\t\t\t\t_moveindex--;\n\t\t\t\tif(_moveindex <= 0){ _moveindex=0;}\n\t\t\t\tif(_index >= _moveindex+_obj.sums){ _index=_moveindex+_obj.sums-1;}\n\t\t\t\t_sumListMove();\n\t\t\t});\n\t\t}//if END\n\n\t\t_sumarr.hover(function(){\n\t\t\t_index = $(this).index();\n\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\timgPlaces();\n\t\t});\n\t\n  }//pcGlasses END\n}//ljsGlasses END"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/distpicker.js",
    "content": "\n\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n  (factory(global.jQuery));\n}(this, (function ($) { 'use strict';\n\n$ = 'default' in $ ? $['default'] : $;\n\nvar DEFAULTS = {\n  // Selects the districts automatically.\n  // 0 -> Disable autoselect\n  // 1 -> Autoselect province only\n  // 2 -> Autoselect province and city only\n  // 3 -> Autoselect all (province, city and district)\n  autoselect: 0,\n\n  // Show placeholder.\n  placeholder: true,\n\n  // Select value. Options: 'name' and 'code'\n  valueType: 'name',\n\n  // Defines the initial value of province.\n  province: '—— 省 ——',\n\n  // Defines the initial value of city.\n  city: '—— 市 ——',\n\n  // Defines the initial value of district.\n  district: '—— 区 ——'\n};\n\nvar DISTRICTS = {\n  100000: {\n    110000: '北京市',\n    120000: '天津市',\n    130000: '河北省',\n    140000: '山西省',\n    150000: '内蒙古自治区',\n    210000: '辽宁省',\n    220000: '吉林省',\n    230000: '黑龙江省',\n    310000: '上海市',\n    320000: '江苏省',\n    330000: '浙江省',\n    340000: '安徽省',\n    350000: '福建省',\n    360000: '江西省',\n    370000: '山东省',\n    410000: '河南省',\n    420000: '湖北省',\n    430000: '湖南省',\n    440000: '广东省',\n    450000: '广西壮族自治区',\n    460000: '海南省',\n    500000: '重庆市',\n    510000: '四川省',\n    520000: '贵州省',\n    530000: '云南省',\n    540000: '西藏自治区',\n    610000: '陕西省',\n    620000: '甘肃省',\n    630000: '青海省',\n    640000: '宁夏回族自治区',\n    650000: '新疆维吾尔自治区',\n    710000: '台湾省',\n    810000: '香港特别行政区',\n    820000: '澳门特别行政区'\n  },\n  110000: {\n    110100: '北京市市辖区'\n  },\n  110100: {\n    110101: '东城区',\n    110102: '西城区',\n    110105: '朝阳区',\n    110106: '丰台区',\n    110107: '石景山区',\n    110108: '海淀区',\n    110109: '门头沟区',\n    110111: '房山区',\n    110112: '通州区',\n    110113: '顺义区',\n    110114: '昌平区',\n    110115: '大兴区',\n    110116: '怀柔区',\n    110117: '平谷区',\n    110118: '密云区',\n    110119: '延庆区'\n  },\n  120000: {\n    120100: '天津市市辖区'\n  },\n  120100: {\n    120101: '和平区',\n    120102: '河东区',\n    120103: '河西区',\n    120104: '南开区',\n    120105: '河北区',\n    120106: '红桥区',\n    120110: '东丽区',\n    120111: '西青区',\n    120112: '津南区',\n    120113: '北辰区',\n    120114: '武清区',\n    120115: '宝坻区',\n    120116: '滨海新区',\n    120117: '宁河区',\n    120118: '静海区',\n    120119: '蓟州区'\n  },\n  130000: {\n    130100: '石家庄市',\n    130200: '唐山市',\n    130300: '秦皇岛市',\n    130400: '邯郸市',\n    130500: '邢台市',\n    130600: '保定市',\n    130700: '张家口市',\n    130800: '承德市',\n    130900: '沧州市',\n    131000: '廊坊市',\n    131100: '衡水市'\n  },\n  130100: {\n    130102: '长安区',\n    130104: '桥西区',\n    130105: '新华区',\n    130107: '井陉矿区',\n    130108: '裕华区',\n    130109: '藁城区',\n    130110: '鹿泉区',\n    130111: '栾城区',\n    130121: '井陉县',\n    130123: '正定县',\n    130125: '行唐县',\n    130126: '灵寿县',\n    130127: '高邑县',\n    130128: '深泽县',\n    130129: '赞皇县',\n    130130: '无极县',\n    130131: '平山县',\n    130132: '元氏县',\n    130133: '赵县',\n    130181: '辛集市',\n    130183: '晋州市',\n    130184: '新乐市'\n  },\n  130200: {\n    130202: '路南区',\n    130203: '路北区',\n    130204: '古冶区',\n    130205: '开平区',\n    130207: '丰南区',\n    130208: '丰润区',\n    130209: '曹妃甸区',\n    130223: '滦县',\n    130224: '滦南县',\n    130225: '乐亭县',\n    130227: '迁西县',\n    130229: '玉田县',\n    130281: '遵化市',\n    130283: '迁安市'\n  },\n  130300: {\n    130302: '海港区',\n    130303: '山海关区',\n    130304: '北戴河区',\n    130306: '抚宁区',\n    130321: '青龙满族自治县',\n    130322: '昌黎县',\n    130324: '卢龙县'\n  },\n  130400: {\n    130402: '邯山区',\n    130403: '丛台区',\n    130404: '复兴区',\n    130406: '峰峰矿区',\n    130423: '临漳县',\n    130424: '成安县',\n    130425: '大名县',\n    130426: '涉县',\n    130427: '磁县',\n    130428: '肥乡区',\n    130429: '永年区',\n    130430: '邱县',\n    130431: '鸡泽县',\n    130432: '广平县',\n    130433: '馆陶县',\n    130434: '魏县',\n    130435: '曲周县',\n    130481: '武安市'\n  },\n  130500: {\n    130502: '桥东区',\n    130503: '桥西区',\n    130521: '邢台县',\n    130522: '临城县',\n    130523: '内丘县',\n    130524: '柏乡县',\n    130525: '隆尧县',\n    130526: '任县',\n    130527: '南和县',\n    130528: '宁晋县',\n    130529: '巨鹿县',\n    130530: '新河县',\n    130531: '广宗县',\n    130532: '平乡县',\n    130533: '威县',\n    130534: '清河县',\n    130535: '临西县',\n    130581: '南宫市',\n    130582: '沙河市'\n  },\n  130600: {\n    130602: '竞秀区',\n    130606: '莲池区',\n    130607: '满城区',\n    130608: '清苑区',\n    130609: '徐水区',\n    130623: '涞水县',\n    130624: '阜平县',\n    130626: '定兴县',\n    130627: '唐县',\n    130628: '高阳县',\n    130629: '容城县',\n    130630: '涞源县',\n    130631: '望都县',\n    130632: '安新县',\n    130633: '易县',\n    130634: '曲阳县',\n    130635: '蠡县',\n    130636: '顺平县',\n    130637: '博野县',\n    130638: '雄县',\n    130681: '涿州市',\n    130682: '定州市',\n    130683: '安国市',\n    130684: '高碑店市'\n  },\n  130700: {\n    130702: '桥东区',\n    130703: '桥西区',\n    130705: '宣化区',\n    130706: '下花园区',\n    130708: '万全区',\n    130709: '崇礼区',\n    130722: '张北县',\n    130723: '康保县',\n    130724: '沽源县',\n    130725: '尚义县',\n    130726: '蔚县',\n    130727: '阳原县',\n    130728: '怀安县',\n    130730: '怀来县',\n    130731: '涿鹿县',\n    130732: '赤城县'\n  },\n  130800: {\n    130802: '双桥区',\n    130803: '双滦区',\n    130804: '鹰手营子矿区',\n    130821: '承德县',\n    130822: '兴隆县',\n    130823: '平泉县',\n    130824: '滦平县',\n    130825: '隆化县',\n    130826: '丰宁满族自治县',\n    130827: '宽城满族自治县',\n    130828: '围场满族蒙古族自治县'\n  },\n  130900: {\n    130902: '新华区',\n    130903: '运河区',\n    130921: '沧县',\n    130922: '青县',\n    130923: '东光县',\n    130924: '海兴县',\n    130925: '盐山县',\n    130926: '肃宁县',\n    130927: '南皮县',\n    130928: '吴桥县',\n    130929: '献县',\n    130930: '孟村回族自治县',\n    130981: '泊头市',\n    130982: '任丘市',\n    130983: '黄骅市',\n    130984: '河间市'\n  },\n  131000: {\n    131002: '安次区',\n    131003: '广阳区',\n    131022: '固安县',\n    131023: '永清县',\n    131024: '香河县',\n    131025: '大城县',\n    131026: '文安县',\n    131028: '大厂回族自治县',\n    131081: '霸州市',\n    131082: '三河市'\n  },\n  131100: {\n    131102: '桃城区',\n    131103: '冀州区',\n    131121: '枣强县',\n    131122: '武邑县',\n    131123: '武强县',\n    131124: '饶阳县',\n    131125: '安平县',\n    131126: '故城县',\n    131127: '景县',\n    131128: '阜城县',\n    131182: '深州市'\n  },\n  140000: {\n    140100: '太原市',\n    140200: '大同市',\n    140300: '阳泉市',\n    140400: '长治市',\n    140500: '晋城市',\n    140600: '朔州市',\n    140700: '晋中市',\n    140800: '运城市',\n    140900: '忻州市',\n    141000: '临汾市',\n    141100: '吕梁市'\n  },\n  140100: {\n    140105: '小店区',\n    140106: '迎泽区',\n    140107: '杏花岭区',\n    140108: '尖草坪区',\n    140109: '万柏林区',\n    140110: '晋源区',\n    140121: '清徐县',\n    140122: '阳曲县',\n    140123: '娄烦县',\n    140181: '古交市'\n  },\n  140200: {\n    140202: '城区',\n    140203: '矿区',\n    140211: '南郊区',\n    140212: '新荣区',\n    140221: '阳高县',\n    140222: '天镇县',\n    140223: '广灵县',\n    140224: '灵丘县',\n    140225: '浑源县',\n    140226: '左云县',\n    140227: '大同县'\n  },\n  140300: {\n    140302: '城区',\n    140303: '矿区',\n    140311: '郊区',\n    140321: '平定县',\n    140322: '盂县'\n  },\n  140400: {\n    140402: '城区',\n    140411: '郊区',\n    140421: '长治县',\n    140423: '襄垣县',\n    140424: '屯留县',\n    140425: '平顺县',\n    140426: '黎城县',\n    140427: '壶关县',\n    140428: '长子县',\n    140429: '武乡县',\n    140430: '沁县',\n    140431: '沁源县',\n    140481: '潞城市'\n  },\n  140500: {\n    140502: '城区',\n    140521: '沁水县',\n    140522: '阳城县',\n    140524: '陵川县',\n    140525: '泽州县',\n    140581: '高平市'\n  },\n  140600: {\n    140602: '朔城区',\n    140603: '平鲁区',\n    140621: '山阴县',\n    140622: '应县',\n    140623: '右玉县',\n    140624: '怀仁县'\n  },\n  140700: {\n    140702: '榆次区',\n    140721: '榆社县',\n    140722: '左权县',\n    140723: '和顺县',\n    140724: '昔阳县',\n    140725: '寿阳县',\n    140726: '太谷县',\n    140727: '祁县',\n    140728: '平遥县',\n    140729: '灵石县',\n    140781: '介休市'\n  },\n  140800: {\n    140802: '盐湖区',\n    140821: '临猗县',\n    140822: '万荣县',\n    140823: '闻喜县',\n    140824: '稷山县',\n    140825: '新绛县',\n    140826: '绛县',\n    140827: '垣曲县',\n    140828: '夏县',\n    140829: '平陆县',\n    140830: '芮城县',\n    140881: '永济市',\n    140882: '河津市'\n  },\n  140900: {\n    140902: '忻府区',\n    140921: '定襄县',\n    140922: '五台县',\n    140923: '代县',\n    140924: '繁峙县',\n    140925: '宁武县',\n    140926: '静乐县',\n    140927: '神池县',\n    140928: '五寨县',\n    140929: '岢岚县',\n    140930: '河曲县',\n    140931: '保德县',\n    140932: '偏关县',\n    140981: '原平市'\n  },\n  141000: {\n    141002: '尧都区',\n    141021: '曲沃县',\n    141022: '翼城县',\n    141023: '襄汾县',\n    141024: '洪洞县',\n    141025: '古县',\n    141026: '安泽县',\n    141027: '浮山县',\n    141028: '吉县',\n    141029: '乡宁县',\n    141030: '大宁县',\n    141031: '隰县',\n    141032: '永和县',\n    141033: '蒲县',\n    141034: '汾西县',\n    141081: '侯马市',\n    141082: '霍州市'\n  },\n  141100: {\n    141102: '离石区',\n    141121: '文水县',\n    141122: '交城县',\n    141123: '兴县',\n    141124: '临县',\n    141125: '柳林县',\n    141126: '石楼县',\n    141127: '岚县',\n    141128: '方山县',\n    141129: '中阳县',\n    141130: '交口县',\n    141181: '孝义市',\n    141182: '汾阳市'\n  },\n  150000: {\n    150100: '呼和浩特市',\n    150200: '包头市',\n    150300: '乌海市',\n    150400: '赤峰市',\n    150500: '通辽市',\n    150600: '鄂尔多斯市',\n    150700: '呼伦贝尔市',\n    150800: '巴彦淖尔市',\n    150900: '乌兰察布市',\n    152200: '兴安盟',\n    152500: '锡林郭勒盟',\n    152900: '阿拉善盟'\n  },\n  150100: {\n    150102: '新城区',\n    150103: '回民区',\n    150104: '玉泉区',\n    150105: '赛罕区',\n    150121: '土默特左旗',\n    150122: '托克托县',\n    150123: '和林格尔县',\n    150124: '清水河县',\n    150125: '武川县'\n  },\n  150200: {\n    150202: '东河区',\n    150203: '昆都仑区',\n    150204: '青山区',\n    150205: '石拐区',\n    150206: '白云鄂博矿区',\n    150207: '九原区',\n    150221: '土默特右旗',\n    150222: '固阳县',\n    150223: '达尔罕茂明安联合旗'\n  },\n  150300: {\n    150302: '海勃湾区',\n    150303: '海南区',\n    150304: '乌达区'\n  },\n  150400: {\n    150402: '红山区',\n    150403: '元宝山区',\n    150404: '松山区',\n    150421: '阿鲁科尔沁旗',\n    150422: '巴林左旗',\n    150423: '巴林右旗',\n    150424: '林西县',\n    150425: '克什克腾旗',\n    150426: '翁牛特旗',\n    150428: '喀喇沁旗',\n    150429: '宁城县',\n    150430: '敖汉旗'\n  },\n  150500: {\n    150502: '科尔沁区',\n    150521: '科尔沁左翼中旗',\n    150522: '科尔沁左翼后旗',\n    150523: '开鲁县',\n    150524: '库伦旗',\n    150525: '奈曼旗',\n    150526: '扎鲁特旗',\n    150581: '霍林郭勒市'\n  },\n  150600: {\n    150602: '东胜区',\n    150603: '康巴什区',\n    150621: '达拉特旗',\n    150622: '准格尔旗',\n    150623: '鄂托克前旗',\n    150624: '鄂托克旗',\n    150625: '杭锦旗',\n    150626: '乌审旗',\n    150627: '伊金霍洛旗'\n  },\n  150700: {\n    150702: '海拉尔区',\n    150703: '扎赉诺尔区',\n    150721: '阿荣旗',\n    150722: '莫力达瓦达斡尔族自治旗',\n    150723: '鄂伦春自治旗',\n    150724: '鄂温克族自治旗',\n    150725: '陈巴尔虎旗',\n    150726: '新巴尔虎左旗',\n    150727: '新巴尔虎右旗',\n    150781: '满洲里市',\n    150782: '牙克石市',\n    150783: '扎兰屯市',\n    150784: '额尔古纳市',\n    150785: '根河市'\n  },\n  150800: {\n    150802: '临河区',\n    150821: '五原县',\n    150822: '磴口县',\n    150823: '乌拉特前旗',\n    150824: '乌拉特中旗',\n    150825: '乌拉特后旗',\n    150826: '杭锦后旗'\n  },\n  150900: {\n    150902: '集宁区',\n    150921: '卓资县',\n    150922: '化德县',\n    150923: '商都县',\n    150924: '兴和县',\n    150925: '凉城县',\n    150926: '察哈尔右翼前旗',\n    150927: '察哈尔右翼中旗',\n    150928: '察哈尔右翼后旗',\n    150929: '四子王旗',\n    150981: '丰镇市'\n  },\n  152200: {\n    152201: '乌兰浩特市',\n    152202: '阿尔山市',\n    152221: '科尔沁右翼前旗',\n    152222: '科尔沁右翼中旗',\n    152223: '扎赉特旗',\n    152224: '突泉县'\n  },\n  152500: {\n    152501: '二连浩特市',\n    152502: '锡林浩特市',\n    152522: '阿巴嘎旗',\n    152523: '苏尼特左旗',\n    152524: '苏尼特右旗',\n    152525: '东乌珠穆沁旗',\n    152526: '西乌珠穆沁旗',\n    152527: '太仆寺旗',\n    152528: '镶黄旗',\n    152529: '正镶白旗',\n    152530: '正蓝旗',\n    152531: '多伦县'\n  },\n  152900: {\n    152921: '阿拉善左旗',\n    152922: '阿拉善右旗',\n    152923: '额济纳旗'\n  },\n  210000: {\n    210100: '沈阳市',\n    210200: '大连市',\n    210300: '鞍山市',\n    210400: '抚顺市',\n    210500: '本溪市',\n    210600: '丹东市',\n    210700: '锦州市',\n    210800: '营口市',\n    210900: '阜新市',\n    211000: '辽阳市',\n    211100: '盘锦市',\n    211200: '铁岭市',\n    211300: '朝阳市',\n    211400: '葫芦岛市'\n  },\n  210100: {\n    210102: '和平区',\n    210103: '沈河区',\n    210104: '大东区',\n    210105: '皇姑区',\n    210106: '铁西区',\n    210111: '苏家屯区',\n    210112: '浑南区',\n    210113: '沈北新区',\n    210114: '于洪区',\n    210115: '辽中区',\n    210123: '康平县',\n    210124: '法库县',\n    210181: '新民市'\n  },\n  210200: {\n    210202: '中山区',\n    210203: '西岗区',\n    210204: '沙河口区',\n    210211: '甘井子区',\n    210212: '旅顺口区',\n    210213: '金州区',\n    210214: '普兰店区',\n    210224: '长海县',\n    210281: '瓦房店市',\n    210283: '庄河市'\n  },\n  210300: {\n    210302: '铁东区',\n    210303: '铁西区',\n    210304: '立山区',\n    210311: '千山区',\n    210321: '台安县',\n    210323: '岫岩满族自治县',\n    210381: '海城市'\n  },\n  210400: {\n    210402: '新抚区',\n    210403: '东洲区',\n    210404: '望花区',\n    210411: '顺城区',\n    210421: '抚顺县',\n    210422: '新宾满族自治县',\n    210423: '清原满族自治县'\n  },\n  210500: {\n    210502: '平山区',\n    210503: '溪湖区',\n    210504: '明山区',\n    210505: '南芬区',\n    210521: '本溪满族自治县',\n    210522: '桓仁满族自治县'\n  },\n  210600: {\n    210602: '元宝区',\n    210603: '振兴区',\n    210604: '振安区',\n    210624: '宽甸满族自治县',\n    210681: '东港市',\n    210682: '凤城市'\n  },\n  210700: {\n    210702: '古塔区',\n    210703: '凌河区',\n    210711: '太和区',\n    210726: '黑山县',\n    210727: '义县',\n    210781: '凌海市',\n    210782: '北镇市'\n  },\n  210800: {\n    210802: '站前区',\n    210803: '西市区',\n    210804: '鲅鱼圈区',\n    210811: '老边区',\n    210881: '盖州市',\n    210882: '大石桥市'\n  },\n  210900: {\n    210902: '海州区',\n    210903: '新邱区',\n    210904: '太平区',\n    210905: '清河门区',\n    210911: '细河区',\n    210921: '阜新蒙古族自治县',\n    210922: '彰武县'\n  },\n  211000: {\n    211002: '白塔区',\n    211003: '文圣区',\n    211004: '宏伟区',\n    211005: '弓长岭区',\n    211011: '太子河区',\n    211021: '辽阳县',\n    211081: '灯塔市'\n  },\n  211100: {\n    211102: '双台子区',\n    211103: '兴隆台区',\n    211104: '大洼区',\n    211122: '盘山县'\n  },\n  211200: {\n    211202: '银州区',\n    211204: '清河区',\n    211221: '铁岭县',\n    211223: '西丰县',\n    211224: '昌图县',\n    211281: '调兵山市',\n    211282: '开原市'\n  },\n  211300: {\n    211302: '双塔区',\n    211303: '龙城区',\n    211321: '朝阳县',\n    211322: '建平县',\n    211324: '喀喇沁左翼蒙古族自治县',\n    211381: '北票市',\n    211382: '凌源市'\n  },\n  211400: {\n    211402: '连山区',\n    211403: '龙港区',\n    211404: '南票区',\n    211421: '绥中县',\n    211422: '建昌县',\n    211481: '兴城市'\n  },\n  220000: {\n    220100: '长春市',\n    220200: '吉林市',\n    220300: '四平市',\n    220400: '辽源市',\n    220500: '通化市',\n    220600: '白山市',\n    220700: '松原市',\n    220800: '白城市',\n    222400: '延边朝鲜族自治州'\n  },\n  220100: {\n    220102: '南关区',\n    220103: '宽城区',\n    220104: '朝阳区',\n    220105: '二道区',\n    220106: '绿园区',\n    220112: '双阳区',\n    220113: '九台区',\n    220122: '农安县',\n    220182: '榆树市',\n    220183: '德惠市'\n  },\n  220200: {\n    220202: '昌邑区',\n    220203: '龙潭区',\n    220204: '船营区',\n    220211: '丰满区',\n    220221: '永吉县',\n    220281: '蛟河市',\n    220282: '桦甸市',\n    220283: '舒兰市',\n    220284: '磐石市'\n  },\n  220300: {\n    220302: '铁西区',\n    220303: '铁东区',\n    220322: '梨树县',\n    220323: '伊通满族自治县',\n    220381: '公主岭市',\n    220382: '双辽市'\n  },\n  220400: {\n    220402: '龙山区',\n    220403: '西安区',\n    220421: '东丰县',\n    220422: '东辽县'\n  },\n  220500: {\n    220502: '东昌区',\n    220503: '二道江区',\n    220521: '通化县',\n    220523: '辉南县',\n    220524: '柳河县',\n    220581: '梅河口市',\n    220582: '集安市'\n  },\n  220600: {\n    220602: '浑江区',\n    220605: '江源区',\n    220621: '抚松县',\n    220622: '靖宇县',\n    220623: '长白朝鲜族自治县',\n    220681: '临江市'\n  },\n  220700: {\n    220702: '宁江区',\n    220721: '前郭尔罗斯蒙古族自治县',\n    220722: '长岭县',\n    220723: '乾安县',\n    220781: '扶余市'\n  },\n  220800: {\n    220802: '洮北区',\n    220821: '镇赉县',\n    220822: '通榆县',\n    220881: '洮南市',\n    220882: '大安市'\n  },\n  222400: {\n    222401: '延吉市',\n    222402: '图们市',\n    222403: '敦化市',\n    222404: '珲春市',\n    222405: '龙井市',\n    222406: '和龙市',\n    222424: '汪清县',\n    222426: '安图县'\n  },\n  230000: {\n    230100: '哈尔滨市',\n    230200: '齐齐哈尔市',\n    230300: '鸡西市',\n    230400: '鹤岗市',\n    230500: '双鸭山市',\n    230600: '大庆市',\n    230700: '伊春市',\n    230800: '佳木斯市',\n    230900: '七台河市',\n    231000: '牡丹江市',\n    231100: '黑河市',\n    231200: '绥化市',\n    232700: '大兴安岭地区'\n  },\n  230100: {\n    230102: '道里区',\n    230103: '南岗区',\n    230104: '道外区',\n    230108: '平房区',\n    230109: '松北区',\n    230110: '香坊区',\n    230111: '呼兰区',\n    230112: '阿城区',\n    230113: '双城区',\n    230123: '依兰县',\n    230124: '方正县',\n    230125: '宾县',\n    230126: '巴彦县',\n    230127: '木兰县',\n    230128: '通河县',\n    230129: '延寿县',\n    230183: '尚志市',\n    230184: '五常市'\n  },\n  230200: {\n    230202: '龙沙区',\n    230203: '建华区',\n    230204: '铁锋区',\n    230205: '昂昂溪区',\n    230206: '富拉尔基区',\n    230207: '碾子山区',\n    230208: '梅里斯达斡尔族区',\n    230221: '龙江县',\n    230223: '依安县',\n    230224: '泰来县',\n    230225: '甘南县',\n    230227: '富裕县',\n    230229: '克山县',\n    230230: '克东县',\n    230231: '拜泉县',\n    230281: '讷河市'\n  },\n  230300: {\n    230302: '鸡冠区',\n    230303: '恒山区',\n    230304: '滴道区',\n    230305: '梨树区',\n    230306: '城子河区',\n    230307: '麻山区',\n    230321: '鸡东县',\n    230381: '虎林市',\n    230382: '密山市'\n  },\n  230400: {\n    230402: '向阳区',\n    230403: '工农区',\n    230404: '南山区',\n    230405: '兴安区',\n    230406: '东山区',\n    230407: '兴山区',\n    230421: '萝北县',\n    230422: '绥滨县'\n  },\n  230500: {\n    230502: '尖山区',\n    230503: '岭东区',\n    230505: '四方台区',\n    230506: '宝山区',\n    230521: '集贤县',\n    230522: '友谊县',\n    230523: '宝清县',\n    230524: '饶河县'\n  },\n  230600: {\n    230602: '萨尔图区',\n    230603: '龙凤区',\n    230604: '让胡路区',\n    230605: '红岗区',\n    230606: '大同区',\n    230621: '肇州县',\n    230622: '肇源县',\n    230623: '林甸县',\n    230624: '杜尔伯特蒙古族自治县'\n  },\n  230700: {\n    230702: '伊春区',\n    230703: '南岔区',\n    230704: '友好区',\n    230705: '西林区',\n    230706: '翠峦区',\n    230707: '新青区',\n    230708: '美溪区',\n    230709: '金山屯区',\n    230710: '五营区',\n    230711: '乌马河区',\n    230712: '汤旺河区',\n    230713: '带岭区',\n    230714: '乌伊岭区',\n    230715: '红星区',\n    230716: '上甘岭区',\n    230722: '嘉荫县',\n    230781: '铁力市'\n  },\n  230800: {\n    230803: '向阳区',\n    230804: '前进区',\n    230805: '东风区',\n    230811: '郊区',\n    230822: '桦南县',\n    230826: '桦川县',\n    230828: '汤原县',\n    230881: '同江市',\n    230882: '富锦市',\n    230883: '抚远市'\n  },\n  230900: {\n    230902: '新兴区',\n    230903: '桃山区',\n    230904: '茄子河区',\n    230921: '勃利县'\n  },\n  231000: {\n    231002: '东安区',\n    231003: '阳明区',\n    231004: '爱民区',\n    231005: '西安区',\n    231025: '林口县',\n    231081: '绥芬河市',\n    231083: '海林市',\n    231084: '宁安市',\n    231085: '穆棱市',\n    231086: '东宁市'\n  },\n  231100: {\n    231102: '爱辉区',\n    231121: '嫩江县',\n    231123: '逊克县',\n    231124: '孙吴县',\n    231181: '北安市',\n    231182: '五大连池市'\n  },\n  231200: {\n    231202: '北林区',\n    231221: '望奎县',\n    231222: '兰西县',\n    231223: '青冈县',\n    231224: '庆安县',\n    231225: '明水县',\n    231226: '绥棱县',\n    231281: '安达市',\n    231282: '肇东市',\n    231283: '海伦市'\n  },\n  232700: {\n    232701: '加格达奇区',\n    232721: '呼玛县',\n    232722: '塔河县',\n    232723: '漠河县'\n  },\n  310000: {\n    310100: '上海市市辖区'\n  },\n  310100: {\n    310101: '黄浦区',\n    310104: '徐汇区',\n    310105: '长宁区',\n    310106: '静安区',\n    310107: '普陀区',\n    310109: '虹口区',\n    310110: '杨浦区',\n    310112: '闵行区',\n    310113: '宝山区',\n    310114: '嘉定区',\n    310115: '浦东新区',\n    310116: '金山区',\n    310117: '松江区',\n    310118: '青浦区',\n    310120: '奉贤区',\n    310151: '崇明区'\n  },\n  320000: {\n    320100: '南京市',\n    320200: '无锡市',\n    320300: '徐州市',\n    320400: '常州市',\n    320500: '苏州市',\n    320600: '南通市',\n    320700: '连云港市',\n    320800: '淮安市',\n    320900: '盐城市',\n    321000: '扬州市',\n    321100: '镇江市',\n    321200: '泰州市',\n    321300: '宿迁市'\n  },\n  320100: {\n    320102: '玄武区',\n    320104: '秦淮区',\n    320105: '建邺区',\n    320106: '鼓楼区',\n    320111: '浦口区',\n    320113: '栖霞区',\n    320114: '雨花台区',\n    320115: '江宁区',\n    320116: '六合区',\n    320117: '溧水区',\n    320118: '高淳区'\n  },\n  320200: {\n    320205: '锡山区',\n    320206: '惠山区',\n    320211: '滨湖区',\n    320213: '梁溪区',\n    320214: '新吴区',\n    320281: '江阴市',\n    320282: '宜兴市'\n  },\n  320300: {\n    320302: '鼓楼区',\n    320303: '云龙区',\n    320305: '贾汪区',\n    320311: '泉山区',\n    320312: '铜山区',\n    320321: '丰县',\n    320322: '沛县',\n    320324: '睢宁县',\n    320381: '新沂市',\n    320382: '邳州市'\n  },\n  320400: {\n    320402: '天宁区',\n    320404: '钟楼区',\n    320411: '新北区',\n    320412: '武进区',\n    320413: '金坛区',\n    320481: '溧阳市'\n  },\n  320500: {\n    320505: '虎丘区',\n    320506: '吴中区',\n    320507: '相城区',\n    320508: '姑苏区',\n    320509: '吴江区',\n    320581: '常熟市',\n    320582: '张家港市',\n    320583: '昆山市',\n    320585: '太仓市'\n  },\n  320600: {\n    320602: '崇川区',\n    320611: '港闸区',\n    320612: '通州区',\n    320621: '海安县',\n    320623: '如东县',\n    320681: '启东市',\n    320682: '如皋市',\n    320684: '海门市'\n  },\n  320700: {\n    320703: '连云区',\n    320706: '海州区',\n    320707: '赣榆区',\n    320722: '东海县',\n    320723: '灌云县',\n    320724: '灌南县'\n  },\n  320800: {\n    320802: '清江浦区',\n    320803: '淮安区',\n    320804: '淮阴区',\n    320813: '洪泽区',\n    320826: '涟水县',\n    320830: '盱眙县',\n    320831: '金湖县'\n  },\n  320900: {\n    320902: '亭湖区',\n    320903: '盐都区',\n    320904: '大丰区',\n    320921: '响水县',\n    320922: '滨海县',\n    320923: '阜宁县',\n    320924: '射阳县',\n    320925: '建湖县',\n    320981: '东台市'\n  },\n  321000: {\n    321002: '广陵区',\n    321003: '邗江区',\n    321012: '江都区',\n    321023: '宝应县',\n    321081: '仪征市',\n    321084: '高邮市'\n  },\n  321100: {\n    321102: '京口区',\n    321111: '润州区',\n    321112: '丹徒区',\n    321181: '丹阳市',\n    321182: '扬中市',\n    321183: '句容市'\n  },\n  321200: {\n    321202: '海陵区',\n    321203: '高港区',\n    321204: '姜堰区',\n    321281: '兴化市',\n    321282: '靖江市',\n    321283: '泰兴市'\n  },\n  321300: {\n    321302: '宿城区',\n    321311: '宿豫区',\n    321322: '沭阳县',\n    321323: '泗阳县',\n    321324: '泗洪县'\n  },\n  330000: {\n    330100: '杭州市',\n    330200: '宁波市',\n    330300: '温州市',\n    330400: '嘉兴市',\n    330500: '湖州市',\n    330600: '绍兴市',\n    330700: '金华市',\n    330800: '衢州市',\n    330900: '舟山市',\n    331000: '台州市',\n    331100: '丽水市'\n  },\n  330100: {\n    330102: '上城区',\n    330103: '下城区',\n    330104: '江干区',\n    330105: '拱墅区',\n    330106: '西湖区',\n    330108: '滨江区',\n    330109: '萧山区',\n    330110: '余杭区',\n    330111: '富阳区',\n    330122: '桐庐县',\n    330127: '淳安县',\n    330182: '建德市',\n    330185: '临安市'\n  },\n  330200: {\n    330203: '海曙区',\n    330205: '江北区',\n    330206: '北仑区',\n    330211: '镇海区',\n    330212: '鄞州区',\n    330225: '象山县',\n    330226: '宁海县',\n    330281: '余姚市',\n    330282: '慈溪市',\n    330283: '奉化区'\n  },\n  330300: {\n    330302: '鹿城区',\n    330303: '龙湾区',\n    330304: '瓯海区',\n    330305: '洞头区',\n    330324: '永嘉县',\n    330326: '平阳县',\n    330327: '苍南县',\n    330328: '文成县',\n    330329: '泰顺县',\n    330381: '瑞安市',\n    330382: '乐清市'\n  },\n  330400: {\n    330402: '南湖区',\n    330411: '秀洲区',\n    330421: '嘉善县',\n    330424: '海盐县',\n    330481: '海宁市',\n    330482: '平湖市',\n    330483: '桐乡市'\n  },\n  330500: {\n    330502: '吴兴区',\n    330503: '南浔区',\n    330521: '德清县',\n    330522: '长兴县',\n    330523: '安吉县'\n  },\n  330600: {\n    330602: '越城区',\n    330603: '柯桥区',\n    330604: '上虞区',\n    330624: '新昌县',\n    330681: '诸暨市',\n    330683: '嵊州市'\n  },\n  330700: {\n    330702: '婺城区',\n    330703: '金东区',\n    330723: '武义县',\n    330726: '浦江县',\n    330727: '磐安县',\n    330781: '兰溪市',\n    330782: '义乌市',\n    330783: '东阳市',\n    330784: '永康市'\n  },\n  330800: {\n    330802: '柯城区',\n    330803: '衢江区',\n    330822: '常山县',\n    330824: '开化县',\n    330825: '龙游县',\n    330881: '江山市'\n  },\n  330900: {\n    330902: '定海区',\n    330903: '普陀区',\n    330921: '岱山县',\n    330922: '嵊泗县'\n  },\n  331000: {\n    331002: '椒江区',\n    331003: '黄岩区',\n    331004: '路桥区',\n    331021: '玉环县',\n    331022: '三门县',\n    331023: '天台县',\n    331024: '仙居县',\n    331081: '温岭市',\n    331082: '临海市'\n  },\n  331100: {\n    331102: '莲都区',\n    331121: '青田县',\n    331122: '缙云县',\n    331123: '遂昌县',\n    331124: '松阳县',\n    331125: '云和县',\n    331126: '庆元县',\n    331127: '景宁畲族自治县',\n    331181: '龙泉市'\n  },\n  340000: {\n    340100: '合肥市',\n    340200: '芜湖市',\n    340300: '蚌埠市',\n    340400: '淮南市',\n    340500: '马鞍山市',\n    340600: '淮北市',\n    340700: '铜陵市',\n    340800: '安庆市',\n    341000: '黄山市',\n    341100: '滁州市',\n    341200: '阜阳市',\n    341300: '宿州市',\n    341500: '六安市',\n    341600: '亳州市',\n    341700: '池州市',\n    341800: '宣城市'\n  },\n  340100: {\n    340102: '瑶海区',\n    340103: '庐阳区',\n    340104: '蜀山区',\n    340111: '包河区',\n    340121: '长丰县',\n    340122: '肥东县',\n    340123: '肥西县',\n    340124: '庐江县',\n    340181: '巢湖市'\n  },\n  340200: {\n    340202: '镜湖区',\n    340203: '弋江区',\n    340207: '鸠江区',\n    340208: '三山区',\n    340221: '芜湖县',\n    340222: '繁昌县',\n    340223: '南陵县',\n    340225: '无为县'\n  },\n  340300: {\n    340302: '龙子湖区',\n    340303: '蚌山区',\n    340304: '禹会区',\n    340311: '淮上区',\n    340321: '怀远县',\n    340322: '五河县',\n    340323: '固镇县'\n  },\n  340400: {\n    340402: '大通区',\n    340403: '田家庵区',\n    340404: '谢家集区',\n    340405: '八公山区',\n    340406: '潘集区',\n    340421: '凤台县',\n    340422: '寿县'\n  },\n  340500: {\n    340503: '花山区',\n    340504: '雨山区',\n    340506: '博望区',\n    340521: '当涂县',\n    340522: '含山县',\n    340523: '和县'\n  },\n  340600: {\n    340602: '杜集区',\n    340603: '相山区',\n    340604: '烈山区',\n    340621: '濉溪县'\n  },\n  340700: {\n    340705: '铜官区',\n    340706: '义安区',\n    340711: '郊区',\n    340722: '枞阳县'\n  },\n  340800: {\n    340802: '迎江区',\n    340803: '大观区',\n    340811: '宜秀区',\n    340822: '怀宁县',\n    340824: '潜山县',\n    340825: '太湖县',\n    340826: '宿松县',\n    340827: '望江县',\n    340828: '岳西县',\n    340881: '桐城市'\n  },\n  341000: {\n    341002: '屯溪区',\n    341003: '黄山区',\n    341004: '徽州区',\n    341021: '歙县',\n    341022: '休宁县',\n    341023: '黟县',\n    341024: '祁门县'\n  },\n  341100: {\n    341102: '琅琊区',\n    341103: '南谯区',\n    341122: '来安县',\n    341124: '全椒县',\n    341125: '定远县',\n    341126: '凤阳县',\n    341181: '天长市',\n    341182: '明光市'\n  },\n  341200: {\n    341202: '颍州区',\n    341203: '颍东区',\n    341204: '颍泉区',\n    341221: '临泉县',\n    341222: '太和县',\n    341225: '阜南县',\n    341226: '颍上县',\n    341282: '界首市'\n  },\n  341300: {\n    341302: '埇桥区',\n    341321: '砀山县',\n    341322: '萧县',\n    341323: '灵璧县',\n    341324: '泗县'\n  },\n  341500: {\n    341502: '金安区',\n    341503: '裕安区',\n    341504: '叶集区',\n    341522: '霍邱县',\n    341523: '舒城县',\n    341524: '金寨县',\n    341525: '霍山县'\n  },\n  341600: {\n    341602: '谯城区',\n    341621: '涡阳县',\n    341622: '蒙城县',\n    341623: '利辛县'\n  },\n  341700: {\n    341702: '贵池区',\n    341721: '东至县',\n    341722: '石台县',\n    341723: '青阳县'\n  },\n  341800: {\n    341802: '宣州区',\n    341821: '郎溪县',\n    341822: '广德县',\n    341823: '泾县',\n    341824: '绩溪县',\n    341825: '旌德县',\n    341881: '宁国市'\n  },\n  350000: {\n    350100: '福州市',\n    350200: '厦门市',\n    350300: '莆田市',\n    350400: '三明市',\n    350500: '泉州市',\n    350600: '漳州市',\n    350700: '南平市',\n    350800: '龙岩市',\n    350900: '宁德市'\n  },\n  350100: {\n    350102: '鼓楼区',\n    350103: '台江区',\n    350104: '仓山区',\n    350105: '马尾区',\n    350111: '晋安区',\n    350121: '闽侯县',\n    350122: '连江县',\n    350123: '罗源县',\n    350124: '闽清县',\n    350125: '永泰县',\n    350128: '平潭县',\n    350181: '福清市',\n    350182: '长乐市'\n  },\n  350200: {\n    350203: '思明区',\n    350205: '海沧区',\n    350206: '湖里区',\n    350211: '集美区',\n    350212: '同安区',\n    350213: '翔安区'\n  },\n  350300: {\n    350302: '城厢区',\n    350303: '涵江区',\n    350304: '荔城区',\n    350305: '秀屿区',\n    350322: '仙游县'\n  },\n  350400: {\n    350402: '梅列区',\n    350403: '三元区',\n    350421: '明溪县',\n    350423: '清流县',\n    350424: '宁化县',\n    350425: '大田县',\n    350426: '尤溪县',\n    350427: '沙县',\n    350428: '将乐县',\n    350429: '泰宁县',\n    350430: '建宁县',\n    350481: '永安市'\n  },\n  350500: {\n    350502: '鲤城区',\n    350503: '丰泽区',\n    350504: '洛江区',\n    350505: '泉港区',\n    350521: '惠安县',\n    350524: '安溪县',\n    350525: '永春县',\n    350526: '德化县',\n    350527: '金门县',\n    350581: '石狮市',\n    350582: '晋江市',\n    350583: '南安市'\n  },\n  350600: {\n    350602: '芗城区',\n    350603: '龙文区',\n    350622: '云霄县',\n    350623: '漳浦县',\n    350624: '诏安县',\n    350625: '长泰县',\n    350626: '东山县',\n    350627: '南靖县',\n    350628: '平和县',\n    350629: '华安县',\n    350681: '龙海市'\n  },\n  350700: {\n    350702: '延平区',\n    350703: '建阳区',\n    350721: '顺昌县',\n    350722: '浦城县',\n    350723: '光泽县',\n    350724: '松溪县',\n    350725: '政和县',\n    350781: '邵武市',\n    350782: '武夷山市',\n    350783: '建瓯市'\n  },\n  350800: {\n    350802: '新罗区',\n    350803: '永定区',\n    350821: '长汀县',\n    350823: '上杭县',\n    350824: '武平县',\n    350825: '连城县',\n    350881: '漳平市'\n  },\n  350900: {\n    350902: '蕉城区',\n    350921: '霞浦县',\n    350922: '古田县',\n    350923: '屏南县',\n    350924: '寿宁县',\n    350925: '周宁县',\n    350926: '柘荣县',\n    350981: '福安市',\n    350982: '福鼎市'\n  },\n  360000: {\n    360100: '南昌市',\n    360200: '景德镇市',\n    360300: '萍乡市',\n    360400: '九江市',\n    360500: '新余市',\n    360600: '鹰潭市',\n    360700: '赣州市',\n    360800: '吉安市',\n    360900: '宜春市',\n    361000: '抚州市',\n    361100: '上饶市'\n  },\n  360100: {\n    360102: '东湖区',\n    360103: '西湖区',\n    360104: '青云谱区',\n    360105: '湾里区',\n    360111: '青山湖区',\n    360112: '新建区',\n    360121: '南昌县',\n    360123: '安义县',\n    360124: '进贤县'\n  },\n  360200: {\n    360202: '昌江区',\n    360203: '珠山区',\n    360222: '浮梁县',\n    360281: '乐平市'\n  },\n  360300: {\n    360302: '安源区',\n    360313: '湘东区',\n    360321: '莲花县',\n    360322: '上栗县',\n    360323: '芦溪县'\n  },\n  360400: {\n    360402: '濂溪区',\n    360403: '浔阳区',\n    360421: '九江县',\n    360423: '武宁县',\n    360424: '修水县',\n    360425: '永修县',\n    360426: '德安县',\n    360427: '庐山市',\n    360428: '都昌县',\n    360429: '湖口县',\n    360430: '彭泽县',\n    360481: '瑞昌市',\n    360482: '共青城市'\n  },\n  360500: {\n    360502: '渝水区',\n    360521: '分宜县'\n  },\n  360600: {\n    360602: '月湖区',\n    360622: '余江县',\n    360681: '贵溪市'\n  },\n  360700: {\n    360702: '章贡区',\n    360703: '南康区',\n    360721: '赣县区',\n    360722: '信丰县',\n    360723: '大余县',\n    360724: '上犹县',\n    360725: '崇义县',\n    360726: '安远县',\n    360727: '龙南县',\n    360728: '定南县',\n    360729: '全南县',\n    360730: '宁都县',\n    360731: '于都县',\n    360732: '兴国县',\n    360733: '会昌县',\n    360734: '寻乌县',\n    360735: '石城县',\n    360781: '瑞金市'\n  },\n  360800: {\n    360802: '吉州区',\n    360803: '青原区',\n    360821: '吉安县',\n    360822: '吉水县',\n    360823: '峡江县',\n    360824: '新干县',\n    360825: '永丰县',\n    360826: '泰和县',\n    360827: '遂川县',\n    360828: '万安县',\n    360829: '安福县',\n    360830: '永新县',\n    360881: '井冈山市'\n  },\n  360900: {\n    360902: '袁州区',\n    360921: '奉新县',\n    360922: '万载县',\n    360923: '上高县',\n    360924: '宜丰县',\n    360925: '靖安县',\n    360926: '铜鼓县',\n    360981: '丰城市',\n    360982: '樟树市',\n    360983: '高安市'\n  },\n  361000: {\n    361002: '临川区',\n    361021: '南城县',\n    361022: '黎川县',\n    361023: '南丰县',\n    361024: '崇仁县',\n    361025: '乐安县',\n    361026: '宜黄县',\n    361027: '金溪县',\n    361028: '资溪县',\n    361029: '东乡县',\n    361030: '广昌县'\n  },\n  361100: {\n    361102: '信州区',\n    361103: '广丰区',\n    361121: '上饶县',\n    361123: '玉山县',\n    361124: '铅山县',\n    361125: '横峰县',\n    361126: '弋阳县',\n    361127: '余干县',\n    361128: '鄱阳县',\n    361129: '万年县',\n    361130: '婺源县',\n    361181: '德兴市'\n  },\n  370000: {\n    370100: '济南市',\n    370200: '青岛市',\n    370300: '淄博市',\n    370400: '枣庄市',\n    370500: '东营市',\n    370600: '烟台市',\n    370700: '潍坊市',\n    370800: '济宁市',\n    370900: '泰安市',\n    371000: '威海市',\n    371100: '日照市',\n    371200: '莱芜市',\n    371300: '临沂市',\n    371400: '德州市',\n    371500: '聊城市',\n    371600: '滨州市',\n    371700: '菏泽市'\n  },\n  370100: {\n    370102: '历下区',\n    370103: '市中区',\n    370104: '槐荫区',\n    370105: '天桥区',\n    370112: '历城区',\n    370113: '长清区',\n    370124: '平阴县',\n    370125: '济阳县',\n    370126: '商河县',\n    370181: '章丘区'\n  },\n  370200: {\n    370202: '市南区',\n    370203: '市北区',\n    370211: '黄岛区',\n    370212: '崂山区',\n    370213: '李沧区',\n    370214: '城阳区',\n    370281: '胶州市',\n    370282: '即墨市',\n    370283: '平度市',\n    370285: '莱西市'\n  },\n  370300: {\n    370302: '淄川区',\n    370303: '张店区',\n    370304: '博山区',\n    370305: '临淄区',\n    370306: '周村区',\n    370321: '桓台县',\n    370322: '高青县',\n    370323: '沂源县'\n  },\n  370400: {\n    370402: '市中区',\n    370403: '薛城区',\n    370404: '峄城区',\n    370405: '台儿庄区',\n    370406: '山亭区',\n    370481: '滕州市'\n  },\n  370500: {\n    370502: '东营区',\n    370503: '河口区',\n    370505: '垦利区',\n    370522: '利津县',\n    370523: '广饶县'\n  },\n  370600: {\n    370602: '芝罘区',\n    370611: '福山区',\n    370612: '牟平区',\n    370613: '莱山区',\n    370634: '长岛县',\n    370681: '龙口市',\n    370682: '莱阳市',\n    370683: '莱州市',\n    370684: '蓬莱市',\n    370685: '招远市',\n    370686: '栖霞市',\n    370687: '海阳市'\n  },\n  370700: {\n    370702: '潍城区',\n    370703: '寒亭区',\n    370704: '坊子区',\n    370705: '奎文区',\n    370724: '临朐县',\n    370725: '昌乐县',\n    370781: '青州市',\n    370782: '诸城市',\n    370783: '寿光市',\n    370784: '安丘市',\n    370785: '高密市',\n    370786: '昌邑市'\n  },\n  370800: {\n    370811: '任城区',\n    370812: '兖州区',\n    370826: '微山县',\n    370827: '鱼台县',\n    370828: '金乡县',\n    370829: '嘉祥县',\n    370830: '汶上县',\n    370831: '泗水县',\n    370832: '梁山县',\n    370881: '曲阜市',\n    370883: '邹城市'\n  },\n  370900: {\n    370902: '泰山区',\n    370911: '岱岳区',\n    370921: '宁阳县',\n    370923: '东平县',\n    370982: '新泰市',\n    370983: '肥城市'\n  },\n  371000: {\n    371002: '环翠区',\n    371003: '文登区',\n    371082: '荣成市',\n    371083: '乳山市'\n  },\n  371100: {\n    371102: '东港区',\n    371103: '岚山区',\n    371121: '五莲县',\n    371122: '莒县'\n  },\n  371200: {\n    371202: '莱城区',\n    371203: '钢城区'\n  },\n  371300: {\n    371302: '兰山区',\n    371311: '罗庄区',\n    371312: '河东区',\n    371321: '沂南县',\n    371322: '郯城县',\n    371323: '沂水县',\n    371324: '兰陵县',\n    371325: '费县',\n    371326: '平邑县',\n    371327: '莒南县',\n    371328: '蒙阴县',\n    371329: '临沭县'\n  },\n  371400: {\n    371402: '德城区',\n    371403: '陵城区',\n    371422: '宁津县',\n    371423: '庆云县',\n    371424: '临邑县',\n    371425: '齐河县',\n    371426: '平原县',\n    371427: '夏津县',\n    371428: '武城县',\n    371481: '乐陵市',\n    371482: '禹城市'\n  },\n  371500: {\n    371502: '东昌府区',\n    371521: '阳谷县',\n    371522: '莘县',\n    371523: '茌平县',\n    371524: '东阿县',\n    371525: '冠县',\n    371526: '高唐县',\n    371581: '临清市'\n  },\n  371600: {\n    371602: '滨城区',\n    371603: '沾化区',\n    371621: '惠民县',\n    371622: '阳信县',\n    371623: '无棣县',\n    371625: '博兴县',\n    371626: '邹平县'\n  },\n  371700: {\n    371702: '牡丹区',\n    371703: '定陶区',\n    371721: '曹县',\n    371722: '单县',\n    371723: '成武县',\n    371724: '巨野县',\n    371725: '郓城县',\n    371726: '鄄城县',\n    371728: '东明县'\n  },\n  410000: {\n    410100: '郑州市',\n    410200: '开封市',\n    410300: '洛阳市',\n    410400: '平顶山市',\n    410500: '安阳市',\n    410600: '鹤壁市',\n    410700: '新乡市',\n    410800: '焦作市',\n    410900: '濮阳市',\n    411000: '许昌市',\n    411100: '漯河市',\n    411200: '三门峡市',\n    411300: '南阳市',\n    411400: '商丘市',\n    411500: '信阳市',\n    411600: '周口市',\n    411700: '驻马店市',\n    419001: '济源市'\n  },\n  410100: {\n    410102: '中原区',\n    410103: '二七区',\n    410104: '管城回族区',\n    410105: '金水区',\n    410106: '上街区',\n    410108: '惠济区',\n    410122: '中牟县',\n    410181: '巩义市',\n    410182: '荥阳市',\n    410183: '新密市',\n    410184: '新郑市',\n    410185: '登封市'\n  },\n  410200: {\n    410202: '龙亭区',\n    410203: '顺河回族区',\n    410204: '鼓楼区',\n    410205: '禹王台区',\n    410212: '祥符区',\n    410221: '杞县',\n    410222: '通许县',\n    410223: '尉氏县',\n    410225: '兰考县'\n  },\n  410300: {\n    410302: '老城区',\n    410303: '西工区',\n    410304: '瀍河回族区',\n    410305: '涧西区',\n    410306: '吉利区',\n    410311: '洛龙区',\n    410322: '孟津县',\n    410323: '新安县',\n    410324: '栾川县',\n    410325: '嵩县',\n    410326: '汝阳县',\n    410327: '宜阳县',\n    410328: '洛宁县',\n    410329: '伊川县',\n    410381: '偃师市'\n  },\n  410400: {\n    410402: '新华区',\n    410403: '卫东区',\n    410404: '石龙区',\n    410411: '湛河区',\n    410421: '宝丰县',\n    410422: '叶县',\n    410423: '鲁山县',\n    410425: '郏县',\n    410481: '舞钢市',\n    410482: '汝州市'\n  },\n  410500: {\n    410502: '文峰区',\n    410503: '北关区',\n    410505: '殷都区',\n    410506: '龙安区',\n    410522: '安阳县',\n    410523: '汤阴县',\n    410526: '滑县',\n    410527: '内黄县',\n    410581: '林州市'\n  },\n  410600: {\n    410602: '鹤山区',\n    410603: '山城区',\n    410611: '淇滨区',\n    410621: '浚县',\n    410622: '淇县'\n  },\n  410700: {\n    410702: '红旗区',\n    410703: '卫滨区',\n    410704: '凤泉区',\n    410711: '牧野区',\n    410721: '新乡县',\n    410724: '获嘉县',\n    410725: '原阳县',\n    410726: '延津县',\n    410727: '封丘县',\n    410728: '长垣县',\n    410781: '卫辉市',\n    410782: '辉县市'\n  },\n  410800: {\n    410802: '解放区',\n    410803: '中站区',\n    410804: '马村区',\n    410811: '山阳区',\n    410821: '修武县',\n    410822: '博爱县',\n    410823: '武陟县',\n    410825: '温县',\n    410882: '沁阳市',\n    410883: '孟州市'\n  },\n  410900: {\n    410902: '华龙区',\n    410922: '清丰县',\n    410923: '南乐县',\n    410926: '范县',\n    410927: '台前县',\n    410928: '濮阳县'\n  },\n  411000: {\n    411002: '魏都区',\n    411023: '建安区',\n    411024: '鄢陵县',\n    411025: '襄城县',\n    411081: '禹州市',\n    411082: '长葛市'\n  },\n  411100: {\n    411102: '源汇区',\n    411103: '郾城区',\n    411104: '召陵区',\n    411121: '舞阳县',\n    411122: '临颍县'\n  },\n  411200: {\n    411202: '湖滨区',\n    411203: '陕州区',\n    411221: '渑池县',\n    411224: '卢氏县',\n    411281: '义马市',\n    411282: '灵宝市'\n  },\n  411300: {\n    411302: '宛城区',\n    411303: '卧龙区',\n    411321: '南召县',\n    411322: '方城县',\n    411323: '西峡县',\n    411324: '镇平县',\n    411325: '内乡县',\n    411326: '淅川县',\n    411327: '社旗县',\n    411328: '唐河县',\n    411329: '新野县',\n    411330: '桐柏县',\n    411381: '邓州市'\n  },\n  411400: {\n    411402: '梁园区',\n    411403: '睢阳区',\n    411421: '民权县',\n    411422: '睢县',\n    411423: '宁陵县',\n    411424: '柘城县',\n    411425: '虞城县',\n    411426: '夏邑县',\n    411481: '永城市'\n  },\n  411500: {\n    411502: '浉河区',\n    411503: '平桥区',\n    411521: '罗山县',\n    411522: '光山县',\n    411523: '新县',\n    411524: '商城县',\n    411525: '固始县',\n    411526: '潢川县',\n    411527: '淮滨县',\n    411528: '息县'\n  },\n  411600: {\n    411602: '川汇区',\n    411621: '扶沟县',\n    411622: '西华县',\n    411623: '商水县',\n    411624: '沈丘县',\n    411625: '郸城县',\n    411626: '淮阳县',\n    411627: '太康县',\n    411628: '鹿邑县',\n    411681: '项城市'\n  },\n  411700: {\n    411702: '驿城区',\n    411721: '西平县',\n    411722: '上蔡县',\n    411723: '平舆县',\n    411724: '正阳县',\n    411725: '确山县',\n    411726: '泌阳县',\n    411727: '汝南县',\n    411728: '遂平县',\n    411729: '新蔡县'\n  },\n  420000: {\n    420100: '武汉市',\n    420200: '黄石市',\n    420300: '十堰市',\n    420500: '宜昌市',\n    420600: '襄阳市',\n    420700: '鄂州市',\n    420800: '荆门市',\n    420900: '孝感市',\n    421000: '荆州市',\n    421100: '黄冈市',\n    421200: '咸宁市',\n    421300: '随州市',\n    422800: '恩施土家族苗族自治州',\n    429004: '仙桃市',\n    429005: '潜江市',\n    429006: '天门市',\n    429021: '神农架林区'\n  },\n  420100: {\n    420102: '江岸区',\n    420103: '江汉区',\n    420104: '硚口区',\n    420105: '汉阳区',\n    420106: '武昌区',\n    420107: '青山区',\n    420111: '洪山区',\n    420112: '东西湖区',\n    420113: '汉南区',\n    420114: '蔡甸区',\n    420115: '江夏区',\n    420116: '黄陂区',\n    420117: '新洲区'\n  },\n  420200: {\n    420202: '黄石港区',\n    420203: '西塞山区',\n    420204: '下陆区',\n    420205: '铁山区',\n    420222: '阳新县',\n    420281: '大冶市'\n  },\n  420300: {\n    420302: '茅箭区',\n    420303: '张湾区',\n    420304: '郧阳区',\n    420322: '郧西县',\n    420323: '竹山县',\n    420324: '竹溪县',\n    420325: '房县',\n    420381: '丹江口市'\n  },\n  420500: {\n    420502: '西陵区',\n    420503: '伍家岗区',\n    420504: '点军区',\n    420505: '猇亭区',\n    420506: '夷陵区',\n    420525: '远安县',\n    420526: '兴山县',\n    420527: '秭归县',\n    420528: '长阳土家族自治县',\n    420529: '五峰土家族自治县',\n    420581: '宜都市',\n    420582: '当阳市',\n    420583: '枝江市'\n  },\n  420600: {\n    420602: '襄城区',\n    420606: '樊城区',\n    420607: '襄州区',\n    420624: '南漳县',\n    420625: '谷城县',\n    420626: '保康县',\n    420682: '老河口市',\n    420683: '枣阳市',\n    420684: '宜城市'\n  },\n  420700: {\n    420702: '梁子湖区',\n    420703: '华容区',\n    420704: '鄂城区'\n  },\n  420800: {\n    420802: '东宝区',\n    420804: '掇刀区',\n    420821: '京山县',\n    420822: '沙洋县',\n    420881: '钟祥市'\n  },\n  420900: {\n    420902: '孝南区',\n    420921: '孝昌县',\n    420922: '大悟县',\n    420923: '云梦县',\n    420981: '应城市',\n    420982: '安陆市',\n    420984: '汉川市'\n  },\n  421000: {\n    421002: '沙市区',\n    421003: '荆州区',\n    421022: '公安县',\n    421023: '监利县',\n    421024: '江陵县',\n    421081: '石首市',\n    421083: '洪湖市',\n    421087: '松滋市'\n  },\n  421100: {\n    421102: '黄州区',\n    421121: '团风县',\n    421122: '红安县',\n    421123: '罗田县',\n    421124: '英山县',\n    421125: '浠水县',\n    421126: '蕲春县',\n    421127: '黄梅县',\n    421181: '麻城市',\n    421182: '武穴市'\n  },\n  421200: {\n    421202: '咸安区',\n    421221: '嘉鱼县',\n    421222: '通城县',\n    421223: '崇阳县',\n    421224: '通山县',\n    421281: '赤壁市'\n  },\n  421300: {\n    421303: '曾都区',\n    421321: '随县',\n    421381: '广水市'\n  },\n  422800: {\n    422801: '恩施市',\n    422802: '利川市',\n    422822: '建始县',\n    422823: '巴东县',\n    422825: '宣恩县',\n    422826: '咸丰县',\n    422827: '来凤县',\n    422828: '鹤峰县'\n  },\n  430000: {\n    430100: '长沙市',\n    430200: '株洲市',\n    430300: '湘潭市',\n    430400: '衡阳市',\n    430500: '邵阳市',\n    430600: '岳阳市',\n    430700: '常德市',\n    430800: '张家界市',\n    430900: '益阳市',\n    431000: '郴州市',\n    431100: '永州市',\n    431200: '怀化市',\n    431300: '娄底市',\n    433100: '湘西土家族苗族自治州'\n  },\n  430100: {\n    430102: '芙蓉区',\n    430103: '天心区',\n    430104: '岳麓区',\n    430105: '开福区',\n    430111: '雨花区',\n    430112: '望城区',\n    430121: '长沙县',\n    430124: '宁乡县',\n    430181: '浏阳市'\n  },\n  430200: {\n    430202: '荷塘区',\n    430203: '芦淞区',\n    430204: '石峰区',\n    430211: '天元区',\n    430221: '株洲县',\n    430223: '攸县',\n    430224: '茶陵县',\n    430225: '炎陵县',\n    430281: '醴陵市'\n  },\n  430300: {\n    430302: '雨湖区',\n    430304: '岳塘区',\n    430321: '湘潭县',\n    430381: '湘乡市',\n    430382: '韶山市'\n  },\n  430400: {\n    430405: '珠晖区',\n    430406: '雁峰区',\n    430407: '石鼓区',\n    430408: '蒸湘区',\n    430412: '南岳区',\n    430421: '衡阳县',\n    430422: '衡南县',\n    430423: '衡山县',\n    430424: '衡东县',\n    430426: '祁东县',\n    430481: '耒阳市',\n    430482: '常宁市'\n  },\n  430500: {\n    430502: '双清区',\n    430503: '大祥区',\n    430511: '北塔区',\n    430521: '邵东县',\n    430522: '新邵县',\n    430523: '邵阳县',\n    430524: '隆回县',\n    430525: '洞口县',\n    430527: '绥宁县',\n    430528: '新宁县',\n    430529: '城步苗族自治县',\n    430581: '武冈市'\n  },\n  430600: {\n    430602: '岳阳楼区',\n    430603: '云溪区',\n    430611: '君山区',\n    430621: '岳阳县',\n    430623: '华容县',\n    430624: '湘阴县',\n    430626: '平江县',\n    430681: '汨罗市',\n    430682: '临湘市'\n  },\n  430700: {\n    430702: '武陵区',\n    430703: '鼎城区',\n    430721: '安乡县',\n    430722: '汉寿县',\n    430723: '澧县',\n    430724: '临澧县',\n    430725: '桃源县',\n    430726: '石门县',\n    430781: '津市市'\n  },\n  430800: {\n    430802: '永定区',\n    430811: '武陵源区',\n    430821: '慈利县',\n    430822: '桑植县'\n  },\n  430900: {\n    430902: '资阳区',\n    430903: '赫山区',\n    430921: '南县',\n    430922: '桃江县',\n    430923: '安化县',\n    430981: '沅江市'\n  },\n  431000: {\n    431002: '北湖区',\n    431003: '苏仙区',\n    431021: '桂阳县',\n    431022: '宜章县',\n    431023: '永兴县',\n    431024: '嘉禾县',\n    431025: '临武县',\n    431026: '汝城县',\n    431027: '桂东县',\n    431028: '安仁县',\n    431081: '资兴市'\n  },\n  431100: {\n    431102: '零陵区',\n    431103: '冷水滩区',\n    431121: '祁阳县',\n    431122: '东安县',\n    431123: '双牌县',\n    431124: '道县',\n    431125: '江永县',\n    431126: '宁远县',\n    431127: '蓝山县',\n    431128: '新田县',\n    431129: '江华瑶族自治县'\n  },\n  431200: {\n    431202: '鹤城区',\n    431221: '中方县',\n    431222: '沅陵县',\n    431223: '辰溪县',\n    431224: '溆浦县',\n    431225: '会同县',\n    431226: '麻阳苗族自治县',\n    431227: '新晃侗族自治县',\n    431228: '芷江侗族自治县',\n    431229: '靖州苗族侗族自治县',\n    431230: '通道侗族自治县',\n    431281: '洪江市'\n  },\n  431300: {\n    431302: '娄星区',\n    431321: '双峰县',\n    431322: '新化县',\n    431381: '冷水江市',\n    431382: '涟源市'\n  },\n  433100: {\n    433101: '吉首市',\n    433122: '泸溪县',\n    433123: '凤凰县',\n    433124: '花垣县',\n    433125: '保靖县',\n    433126: '古丈县',\n    433127: '永顺县',\n    433130: '龙山县'\n  },\n  440000: {\n    440100: '广州市',\n    440200: '韶关市',\n    440300: '深圳市',\n    440400: '珠海市',\n    440500: '汕头市',\n    440600: '佛山市',\n    440700: '江门市',\n    440800: '湛江市',\n    440900: '茂名市',\n    441200: '肇庆市',\n    441300: '惠州市',\n    441400: '梅州市',\n    441500: '汕尾市',\n    441600: '河源市',\n    441700: '阳江市',\n    441800: '清远市',\n    441900: '东莞市',\n    442000: '中山市',\n    445100: '潮州市',\n    445200: '揭阳市',\n    445300: '云浮市'\n  },\n  440100: {\n    440103: '荔湾区',\n    440104: '越秀区',\n    440105: '海珠区',\n    440106: '天河区',\n    440111: '白云区',\n    440112: '黄埔区',\n    440113: '番禺区',\n    440114: '花都区',\n    440115: '南沙区',\n    440117: '从化区',\n    440118: '增城区'\n  },\n  440200: {\n    440203: '武江区',\n    440204: '浈江区',\n    440205: '曲江区',\n    440222: '始兴县',\n    440224: '仁化县',\n    440229: '翁源县',\n    440232: '乳源瑶族自治县',\n    440233: '新丰县',\n    440281: '乐昌市',\n    440282: '南雄市'\n  },\n  440300: {\n    440303: '罗湖区',\n    440304: '福田区',\n    440305: '南山区',\n    440306: '宝安区',\n    440307: '龙岗区',\n    440308: '盐田区',\n    440309: '龙华区',\n    440310: '坪山区'\n  },\n  440400: {\n    440402: '香洲区',\n    440403: '斗门区',\n    440404: '金湾区'\n  },\n  440500: {\n    440507: '龙湖区',\n    440511: '金平区',\n    440512: '濠江区',\n    440513: '潮阳区',\n    440514: '潮南区',\n    440515: '澄海区',\n    440523: '南澳县'\n  },\n  440600: {\n    440604: '禅城区',\n    440605: '南海区',\n    440606: '顺德区',\n    440607: '三水区',\n    440608: '高明区'\n  },\n  440700: {\n    440703: '蓬江区',\n    440704: '江海区',\n    440705: '新会区',\n    440781: '台山市',\n    440783: '开平市',\n    440784: '鹤山市',\n    440785: '恩平市'\n  },\n  440800: {\n    440802: '赤坎区',\n    440803: '霞山区',\n    440804: '坡头区',\n    440811: '麻章区',\n    440823: '遂溪县',\n    440825: '徐闻县',\n    440881: '廉江市',\n    440882: '雷州市',\n    440883: '吴川市'\n  },\n  440900: {\n    440902: '茂南区',\n    440904: '电白区',\n    440981: '高州市',\n    440982: '化州市',\n    440983: '信宜市'\n  },\n  441200: {\n    441202: '端州区',\n    441203: '鼎湖区',\n    441204: '高要区',\n    441223: '广宁县',\n    441224: '怀集县',\n    441225: '封开县',\n    441226: '德庆县',\n    441284: '四会市'\n  },\n  441300: {\n    441302: '惠城区',\n    441303: '惠阳区',\n    441322: '博罗县',\n    441323: '惠东县',\n    441324: '龙门县'\n  },\n  441400: {\n    441402: '梅江区',\n    441403: '梅县区',\n    441422: '大埔县',\n    441423: '丰顺县',\n    441424: '五华县',\n    441426: '平远县',\n    441427: '蕉岭县',\n    441481: '兴宁市'\n  },\n  441500: {\n    441502: '城区',\n    441521: '海丰县',\n    441523: '陆河县',\n    441581: '陆丰市'\n  },\n  441600: {\n    441602: '源城区',\n    441621: '紫金县',\n    441622: '龙川县',\n    441623: '连平县',\n    441624: '和平县',\n    441625: '东源县'\n  },\n  441700: {\n    441702: '江城区',\n    441704: '阳东区',\n    441721: '阳西县',\n    441781: '阳春市'\n  },\n  441800: {\n    441802: '清城区',\n    441803: '清新区',\n    441821: '佛冈县',\n    441823: '阳山县',\n    441825: '连山壮族瑶族自治县',\n    441826: '连南瑶族自治县',\n    441881: '英德市',\n    441882: '连州市'\n  },\n  445100: {\n    445102: '湘桥区',\n    445103: '潮安区',\n    445122: '饶平县'\n  },\n  445200: {\n    445202: '榕城区',\n    445203: '揭东区',\n    445222: '揭西县',\n    445224: '惠来县',\n    445281: '普宁市'\n  },\n  445300: {\n    445302: '云城区',\n    445303: '云安区',\n    445321: '新兴县',\n    445322: '郁南县',\n    445381: '罗定市'\n  },\n  450000: {\n    450100: '南宁市',\n    450200: '柳州市',\n    450300: '桂林市',\n    450400: '梧州市',\n    450500: '北海市',\n    450600: '防城港市',\n    450700: '钦州市',\n    450800: '贵港市',\n    450900: '玉林市',\n    451000: '百色市',\n    451100: '贺州市',\n    451200: '河池市',\n    451300: '来宾市',\n    451400: '崇左市'\n  },\n  450100: {\n    450102: '兴宁区',\n    450103: '青秀区',\n    450105: '江南区',\n    450107: '西乡塘区',\n    450108: '良庆区',\n    450109: '邕宁区',\n    450110: '武鸣区',\n    450123: '隆安县',\n    450124: '马山县',\n    450125: '上林县',\n    450126: '宾阳县',\n    450127: '横县'\n  },\n  450200: {\n    450202: '城中区',\n    450203: '鱼峰区',\n    450204: '柳南区',\n    450205: '柳北区',\n    450221: '柳江区',\n    450222: '柳城县',\n    450223: '鹿寨县',\n    450224: '融安县',\n    450225: '融水苗族自治县',\n    450226: '三江侗族自治县'\n  },\n  450300: {\n    450302: '秀峰区',\n    450303: '叠彩区',\n    450304: '象山区',\n    450305: '七星区',\n    450311: '雁山区',\n    450312: '临桂区',\n    450321: '阳朔县',\n    450323: '灵川县',\n    450324: '全州县',\n    450325: '兴安县',\n    450326: '永福县',\n    450327: '灌阳县',\n    450328: '龙胜各族自治县',\n    450329: '资源县',\n    450330: '平乐县',\n    450331: '荔浦县',\n    450332: '恭城瑶族自治县'\n  },\n  450400: {\n    450403: '万秀区',\n    450405: '长洲区',\n    450406: '龙圩区',\n    450421: '苍梧县',\n    450422: '藤县',\n    450423: '蒙山县',\n    450481: '岑溪市'\n  },\n  450500: {\n    450502: '海城区',\n    450503: '银海区',\n    450512: '铁山港区',\n    450521: '合浦县'\n  },\n  450600: {\n    450602: '港口区',\n    450603: '防城区',\n    450621: '上思县',\n    450681: '东兴市'\n  },\n  450700: {\n    450702: '钦南区',\n    450703: '钦北区',\n    450721: '灵山县',\n    450722: '浦北县'\n  },\n  450800: {\n    450802: '港北区',\n    450803: '港南区',\n    450804: '覃塘区',\n    450821: '平南县',\n    450881: '桂平市'\n  },\n  450900: {\n    450902: '玉州区',\n    450903: '福绵区',\n    450921: '容县',\n    450922: '陆川县',\n    450923: '博白县',\n    450924: '兴业县',\n    450981: '北流市'\n  },\n  451000: {\n    451002: '右江区',\n    451021: '田阳县',\n    451022: '田东县',\n    451023: '平果县',\n    451024: '德保县',\n    451026: '那坡县',\n    451027: '凌云县',\n    451028: '乐业县',\n    451029: '田林县',\n    451030: '西林县',\n    451031: '隆林各族自治县',\n    451081: '靖西市'\n  },\n  451100: {\n    451102: '八步区',\n    451103: '平桂区',\n    451121: '昭平县',\n    451122: '钟山县',\n    451123: '富川瑶族自治县'\n  },\n  451200: {\n    451202: '金城江区',\n    451221: '南丹县',\n    451222: '天峨县',\n    451223: '凤山县',\n    451224: '东兰县',\n    451225: '罗城仫佬族自治县',\n    451226: '环江毛南族自治县',\n    451227: '巴马瑶族自治县',\n    451228: '都安瑶族自治县',\n    451229: '大化瑶族自治县',\n    451281: '宜州市'\n  },\n  451300: {\n    451302: '兴宾区',\n    451321: '忻城县',\n    451322: '象州县',\n    451323: '武宣县',\n    451324: '金秀瑶族自治县',\n    451381: '合山市'\n  },\n  451400: {\n    451402: '江州区',\n    451421: '扶绥县',\n    451422: '宁明县',\n    451423: '龙州县',\n    451424: '大新县',\n    451425: '天等县',\n    451481: '凭祥市'\n  },\n  460000: {\n    460100: '海口市',\n    460200: '三亚市',\n    460300: '三沙市',\n    460400: '儋州市',\n    469001: '五指山市',\n    469002: '琼海市',\n    469005: '文昌市',\n    469006: '万宁市',\n    469007: '东方市',\n    469021: '定安县',\n    469022: '屯昌县',\n    469023: '澄迈县',\n    469024: '临高县',\n    469025: '白沙黎族自治县',\n    469026: '昌江黎族自治县',\n    469027: '乐东黎族自治县',\n    469028: '陵水黎族自治县',\n    469029: '保亭黎族苗族自治县',\n    469030: '琼中黎族苗族自治县'\n  },\n  460100: {\n    460105: '秀英区',\n    460106: '龙华区',\n    460107: '琼山区',\n    460108: '美兰区'\n  },\n  460200: {\n    460202: '海棠区',\n    460203: '吉阳区',\n    460204: '天涯区',\n    460205: '崖州区'\n  },\n  460300: {\n    460321: '西沙群岛',\n    460322: '南沙群岛',\n    460323: '中沙群岛的岛礁及其海域'\n  },\n  500000: {\n    500100: '重庆市市辖区',\n    500200: '重庆市郊县'\n  },\n  500100: {\n    500101: '万州区',\n    500102: '涪陵区',\n    500103: '渝中区',\n    500104: '大渡口区',\n    500105: '江北区',\n    500106: '沙坪坝区',\n    500107: '九龙坡区',\n    500108: '南岸区',\n    500109: '北碚区',\n    500110: '綦江区',\n    500111: '大足区',\n    500112: '渝北区',\n    500113: '巴南区',\n    500114: '黔江区',\n    500115: '长寿区',\n    500116: '江津区',\n    500117: '合川区',\n    500118: '永川区',\n    500119: '南川区',\n    500120: '璧山区',\n    500151: '铜梁区',\n    500152: '潼南区',\n    500153: '荣昌区',\n    500154: '开州区',\n    500228: '梁平区',\n    500229: '城口县',\n    500230: '丰都县',\n    500231: '垫江县',\n    500232: '武隆区',\n    500233: '忠县',\n    500235: '云阳县',\n    500236: '奉节县',\n    500237: '巫山县',\n    500238: '巫溪县',\n    500240: '石柱土家族自治县',\n    500241: '秀山土家族苗族自治县',\n    500242: '酉阳土家族苗族自治县',\n    500243: '彭水苗族土家族自治县'\n  },\n  510000: {\n    510100: '成都市',\n    510300: '自贡市',\n    510400: '攀枝花市',\n    510500: '泸州市',\n    510600: '德阳市',\n    510700: '绵阳市',\n    510800: '广元市',\n    510900: '遂宁市',\n    511000: '内江市',\n    511100: '乐山市',\n    511300: '南充市',\n    511400: '眉山市',\n    511500: '宜宾市',\n    511600: '广安市',\n    511700: '达州市',\n    511800: '雅安市',\n    511900: '巴中市',\n    512000: '资阳市',\n    513200: '阿坝藏族羌族自治州',\n    513300: '甘孜藏族自治州',\n    513400: '凉山彝族自治州'\n  },\n  510100: {\n    510104: '锦江区',\n    510105: '青羊区',\n    510106: '金牛区',\n    510107: '武侯区',\n    510108: '成华区',\n    510112: '龙泉驿区',\n    510113: '青白江区',\n    510114: '新都区',\n    510115: '温江区',\n    510116: '双流区',\n    510121: '金堂县',\n    510124: '郫都区',\n    510129: '大邑县',\n    510131: '蒲江县',\n    510132: '新津县',\n    510180: '简阳市',\n    510181: '都江堰市',\n    510182: '彭州市',\n    510183: '邛崃市',\n    510184: '崇州市'\n  },\n  510300: {\n    510302: '自流井区',\n    510303: '贡井区',\n    510304: '大安区',\n    510311: '沿滩区',\n    510321: '荣县',\n    510322: '富顺县'\n  },\n  510400: {\n    510402: '东区',\n    510403: '西区',\n    510411: '仁和区',\n    510421: '米易县',\n    510422: '盐边县'\n  },\n  510500: {\n    510502: '江阳区',\n    510503: '纳溪区',\n    510504: '龙马潭区',\n    510521: '泸县',\n    510522: '合江县',\n    510524: '叙永县',\n    510525: '古蔺县'\n  },\n  510600: {\n    510603: '旌阳区',\n    510623: '中江县',\n    510626: '罗江县',\n    510681: '广汉市',\n    510682: '什邡市',\n    510683: '绵竹市'\n  },\n  510700: {\n    510703: '涪城区',\n    510704: '游仙区',\n    510705: '安州区',\n    510722: '三台县',\n    510723: '盐亭县',\n    510725: '梓潼县',\n    510726: '北川羌族自治县',\n    510727: '平武县',\n    510781: '江油市'\n  },\n  510800: {\n    510802: '利州区',\n    510811: '昭化区',\n    510812: '朝天区',\n    510821: '旺苍县',\n    510822: '青川县',\n    510823: '剑阁县',\n    510824: '苍溪县'\n  },\n  510900: {\n    510903: '船山区',\n    510904: '安居区',\n    510921: '蓬溪县',\n    510922: '射洪县',\n    510923: '大英县'\n  },\n  511000: {\n    511002: '市中区',\n    511011: '东兴区',\n    511024: '威远县',\n    511025: '资中县',\n    511028: '隆昌县'\n  },\n  511100: {\n    511102: '市中区',\n    511111: '沙湾区',\n    511112: '五通桥区',\n    511113: '金口河区',\n    511123: '犍为县',\n    511124: '井研县',\n    511126: '夹江县',\n    511129: '沐川县',\n    511132: '峨边彝族自治县',\n    511133: '马边彝族自治县',\n    511181: '峨眉山市'\n  },\n  511300: {\n    511302: '顺庆区',\n    511303: '高坪区',\n    511304: '嘉陵区',\n    511321: '南部县',\n    511322: '营山县',\n    511323: '蓬安县',\n    511324: '仪陇县',\n    511325: '西充县',\n    511381: '阆中市'\n  },\n  511400: {\n    511402: '东坡区',\n    511403: '彭山区',\n    511421: '仁寿县',\n    511423: '洪雅县',\n    511424: '丹棱县',\n    511425: '青神县'\n  },\n  511500: {\n    511502: '翠屏区',\n    511503: '南溪区',\n    511521: '宜宾县',\n    511523: '江安县',\n    511524: '长宁县',\n    511525: '高县',\n    511526: '珙县',\n    511527: '筠连县',\n    511528: '兴文县',\n    511529: '屏山县'\n  },\n  511600: {\n    511602: '广安区',\n    511603: '前锋区',\n    511621: '岳池县',\n    511622: '武胜县',\n    511623: '邻水县',\n    511681: '华蓥市'\n  },\n  511700: {\n    511702: '通川区',\n    511703: '达川区',\n    511722: '宣汉县',\n    511723: '开江县',\n    511724: '大竹县',\n    511725: '渠县',\n    511781: '万源市'\n  },\n  511800: {\n    511802: '雨城区',\n    511803: '名山区',\n    511822: '荥经县',\n    511823: '汉源县',\n    511824: '石棉县',\n    511825: '天全县',\n    511826: '芦山县',\n    511827: '宝兴县'\n  },\n  511900: {\n    511902: '巴州区',\n    511903: '恩阳区',\n    511921: '通江县',\n    511922: '南江县',\n    511923: '平昌县'\n  },\n  512000: {\n    512002: '雁江区',\n    512021: '安岳县',\n    512022: '乐至县'\n  },\n  513200: {\n    513201: '马尔康市',\n    513221: '汶川县',\n    513222: '理县',\n    513223: '茂县',\n    513224: '松潘县',\n    513225: '九寨沟县',\n    513226: '金川县',\n    513227: '小金县',\n    513228: '黑水县',\n    513230: '壤塘县',\n    513231: '阿坝县',\n    513232: '若尔盖县',\n    513233: '红原县'\n  },\n  513300: {\n    513301: '康定市',\n    513322: '泸定县',\n    513323: '丹巴县',\n    513324: '九龙县',\n    513325: '雅江县',\n    513326: '道孚县',\n    513327: '炉霍县',\n    513328: '甘孜县',\n    513329: '新龙县',\n    513330: '德格县',\n    513331: '白玉县',\n    513332: '石渠县',\n    513333: '色达县',\n    513334: '理塘县',\n    513335: '巴塘县',\n    513336: '乡城县',\n    513337: '稻城县',\n    513338: '得荣县'\n  },\n  513400: {\n    513401: '西昌市',\n    513422: '木里藏族自治县',\n    513423: '盐源县',\n    513424: '德昌县',\n    513425: '会理县',\n    513426: '会东县',\n    513427: '宁南县',\n    513428: '普格县',\n    513429: '布拖县',\n    513430: '金阳县',\n    513431: '昭觉县',\n    513432: '喜德县',\n    513433: '冕宁县',\n    513434: '越西县',\n    513435: '甘洛县',\n    513436: '美姑县',\n    513437: '雷波县'\n  },\n  520000: {\n    520100: '贵阳市',\n    520200: '六盘水市',\n    520300: '遵义市',\n    520400: '安顺市',\n    520500: '毕节市',\n    520600: '铜仁市',\n    522300: '黔西南布依族苗族自治州',\n    522600: '黔东南苗族侗族自治州',\n    522700: '黔南布依族苗族自治州'\n  },\n  520100: {\n    520102: '南明区',\n    520103: '云岩区',\n    520111: '花溪区',\n    520112: '乌当区',\n    520113: '白云区',\n    520115: '观山湖区',\n    520121: '开阳县',\n    520122: '息烽县',\n    520123: '修文县',\n    520181: '清镇市'\n  },\n  520200: {\n    520201: '钟山区',\n    520203: '六枝特区',\n    520221: '水城县',\n    520222: '盘县'\n  },\n  520300: {\n    520302: '红花岗区',\n    520303: '汇川区',\n    520304: '播州区',\n    520322: '桐梓县',\n    520323: '绥阳县',\n    520324: '正安县',\n    520325: '道真仡佬族苗族自治县',\n    520326: '务川仡佬族苗族自治县',\n    520327: '凤冈县',\n    520328: '湄潭县',\n    520329: '余庆县',\n    520330: '习水县',\n    520381: '赤水市',\n    520382: '仁怀市'\n  },\n  520400: {\n    520402: '西秀区',\n    520403: '平坝区',\n    520422: '普定县',\n    520423: '镇宁布依族苗族自治县',\n    520424: '关岭布依族苗族自治县',\n    520425: '紫云苗族布依族自治县'\n  },\n  520500: {\n    520502: '七星关区',\n    520521: '大方县',\n    520522: '黔西县',\n    520523: '金沙县',\n    520524: '织金县',\n    520525: '纳雍县',\n    520526: '威宁彝族回族苗族自治县',\n    520527: '赫章县'\n  },\n  520600: {\n    520602: '碧江区',\n    520603: '万山区',\n    520621: '江口县',\n    520622: '玉屏侗族自治县',\n    520623: '石阡县',\n    520624: '思南县',\n    520625: '印江土家族苗族自治县',\n    520626: '德江县',\n    520627: '沿河土家族自治县',\n    520628: '松桃苗族自治县'\n  },\n  522300: {\n    522301: '兴义市',\n    522322: '兴仁县',\n    522323: '普安县',\n    522324: '晴隆县',\n    522325: '贞丰县',\n    522326: '望谟县',\n    522327: '册亨县',\n    522328: '安龙县'\n  },\n  522600: {\n    522601: '凯里市',\n    522622: '黄平县',\n    522623: '施秉县',\n    522624: '三穗县',\n    522625: '镇远县',\n    522626: '岑巩县',\n    522627: '天柱县',\n    522628: '锦屏县',\n    522629: '剑河县',\n    522630: '台江县',\n    522631: '黎平县',\n    522632: '榕江县',\n    522633: '从江县',\n    522634: '雷山县',\n    522635: '麻江县',\n    522636: '丹寨县'\n  },\n  522700: {\n    522701: '都匀市',\n    522702: '福泉市',\n    522722: '荔波县',\n    522723: '贵定县',\n    522725: '瓮安县',\n    522726: '独山县',\n    522727: '平塘县',\n    522728: '罗甸县',\n    522729: '长顺县',\n    522730: '龙里县',\n    522731: '惠水县',\n    522732: '三都水族自治县'\n  },\n  530000: {\n    530100: '昆明市',\n    530300: '曲靖市',\n    530400: '玉溪市',\n    530500: '保山市',\n    530600: '昭通市',\n    530700: '丽江市',\n    530800: '普洱市',\n    530900: '临沧市',\n    532300: '楚雄彝族自治州',\n    532500: '红河哈尼族彝族自治州',\n    532600: '文山壮族苗族自治州',\n    532800: '西双版纳傣族自治州',\n    532900: '大理白族自治州',\n    533100: '德宏傣族景颇族自治州',\n    533300: '怒江傈僳族自治州',\n    533400: '迪庆藏族自治州'\n  },\n  530100: {\n    530102: '五华区',\n    530103: '盘龙区',\n    530111: '官渡区',\n    530112: '西山区',\n    530113: '东川区',\n    530114: '呈贡区',\n    530122: '晋宁区',\n    530124: '富民县',\n    530125: '宜良县',\n    530126: '石林彝族自治县',\n    530127: '嵩明县',\n    530128: '禄劝彝族苗族自治县',\n    530129: '寻甸回族彝族自治县',\n    530181: '安宁市'\n  },\n  530300: {\n    530302: '麒麟区',\n    530303: '沾益区',\n    530321: '马龙县',\n    530322: '陆良县',\n    530323: '师宗县',\n    530324: '罗平县',\n    530325: '富源县',\n    530326: '会泽县',\n    530381: '宣威市'\n  },\n  530400: {\n    530402: '红塔区',\n    530403: '江川区',\n    530422: '澄江县',\n    530423: '通海县',\n    530424: '华宁县',\n    530425: '易门县',\n    530426: '峨山彝族自治县',\n    530427: '新平彝族傣族自治县',\n    530428: '元江哈尼族彝族傣族自治县'\n  },\n  530500: {\n    530502: '隆阳区',\n    530521: '施甸县',\n    530523: '龙陵县',\n    530524: '昌宁县',\n    530581: '腾冲市'\n  },\n  530600: {\n    530602: '昭阳区',\n    530621: '鲁甸县',\n    530622: '巧家县',\n    530623: '盐津县',\n    530624: '大关县',\n    530625: '永善县',\n    530626: '绥江县',\n    530627: '镇雄县',\n    530628: '彝良县',\n    530629: '威信县',\n    530630: '水富县'\n  },\n  530700: {\n    530702: '古城区',\n    530721: '玉龙纳西族自治县',\n    530722: '永胜县',\n    530723: '华坪县',\n    530724: '宁蒗彝族自治县'\n  },\n  530800: {\n    530802: '思茅区',\n    530821: '宁洱哈尼族彝族自治县',\n    530822: '墨江哈尼族自治县',\n    530823: '景东彝族自治县',\n    530824: '景谷傣族彝族自治县',\n    530825: '镇沅彝族哈尼族拉祜族自治县',\n    530826: '江城哈尼族彝族自治县',\n    530827: '孟连傣族拉祜族佤族自治县',\n    530828: '澜沧拉祜族自治县',\n    530829: '西盟佤族自治县'\n  },\n  530900: {\n    530902: '临翔区',\n    530921: '凤庆县',\n    530922: '云县',\n    530923: '永德县',\n    530924: '镇康县',\n    530925: '双江拉祜族佤族布朗族傣族自治县',\n    530926: '耿马傣族佤族自治县',\n    530927: '沧源佤族自治县'\n  },\n  532300: {\n    532301: '楚雄市',\n    532322: '双柏县',\n    532323: '牟定县',\n    532324: '南华县',\n    532325: '姚安县',\n    532326: '大姚县',\n    532327: '永仁县',\n    532328: '元谋县',\n    532329: '武定县',\n    532331: '禄丰县'\n  },\n  532500: {\n    532501: '个旧市',\n    532502: '开远市',\n    532503: '蒙自市',\n    532504: '弥勒市',\n    532523: '屏边苗族自治县',\n    532524: '建水县',\n    532525: '石屏县',\n    532527: '泸西县',\n    532528: '元阳县',\n    532529: '红河县',\n    532530: '金平苗族瑶族傣族自治县',\n    532531: '绿春县',\n    532532: '河口瑶族自治县'\n  },\n  532600: {\n    532601: '文山市',\n    532622: '砚山县',\n    532623: '西畴县',\n    532624: '麻栗坡县',\n    532625: '马关县',\n    532626: '丘北县',\n    532627: '广南县',\n    532628: '富宁县'\n  },\n  532800: {\n    532801: '景洪市',\n    532822: '勐海县',\n    532823: '勐腊县'\n  },\n  532900: {\n    532901: '大理市',\n    532922: '漾濞彝族自治县',\n    532923: '祥云县',\n    532924: '宾川县',\n    532925: '弥渡县',\n    532926: '南涧彝族自治县',\n    532927: '巍山彝族回族自治县',\n    532928: '永平县',\n    532929: '云龙县',\n    532930: '洱源县',\n    532931: '剑川县',\n    532932: '鹤庆县'\n  },\n  533100: {\n    533102: '瑞丽市',\n    533103: '芒市',\n    533122: '梁河县',\n    533123: '盈江县',\n    533124: '陇川县'\n  },\n  533300: {\n    533301: '泸水市',\n    533323: '福贡县',\n    533324: '贡山独龙族怒族自治县',\n    533325: '兰坪白族普米族自治县'\n  },\n  533400: {\n    533401: '香格里拉市',\n    533422: '德钦县',\n    533423: '维西傈僳族自治县'\n  },\n  540000: {\n    540100: '拉萨市',\n    540200: '日喀则市',\n    540300: '昌都市',\n    540400: '林芝市',\n    540500: '山南市',\n    542400: '那曲地区',\n    542500: '阿里地区'\n  },\n  540100: {\n    540102: '城关区',\n    540103: '堆龙德庆区',\n    540121: '林周县',\n    540122: '当雄县',\n    540123: '尼木县',\n    540124: '曲水县',\n    540126: '达孜县',\n    540127: '墨竹工卡县'\n  },\n  540200: {\n    540202: '桑珠孜区',\n    540221: '南木林县',\n    540222: '江孜县',\n    540223: '定日县',\n    540224: '萨迦县',\n    540225: '拉孜县',\n    540226: '昂仁县',\n    540227: '谢通门县',\n    540228: '白朗县',\n    540229: '仁布县',\n    540230: '康马县',\n    540231: '定结县',\n    540232: '仲巴县',\n    540233: '亚东县',\n    540234: '吉隆县',\n    540235: '聂拉木县',\n    540236: '萨嘎县',\n    540237: '岗巴县'\n  },\n  540300: {\n    540302: '卡若区',\n    540321: '江达县',\n    540322: '贡觉县',\n    540323: '类乌齐县',\n    540324: '丁青县',\n    540325: '察雅县',\n    540326: '八宿县',\n    540327: '左贡县',\n    540328: '芒康县',\n    540329: '洛隆县',\n    540330: '边坝县'\n  },\n  540400: {\n    540402: '巴宜区',\n    540421: '工布江达县',\n    540422: '米林县',\n    540423: '墨脱县',\n    540424: '波密县',\n    540425: '察隅县',\n    540426: '朗县'\n  },\n  540500: {\n    540502: '乃东区',\n    540521: '扎囊县',\n    540522: '贡嘎县',\n    540523: '桑日县',\n    540524: '琼结县',\n    540525: '曲松县',\n    540526: '措美县',\n    540527: '洛扎县',\n    540528: '加查县',\n    540529: '隆子县',\n    540530: '错那县',\n    540531: '浪卡子县'\n  },\n  542400: {\n    542421: '那曲县',\n    542422: '嘉黎县',\n    542423: '比如县',\n    542424: '聂荣县',\n    542425: '安多县',\n    542426: '申扎县',\n    542427: '索县',\n    542428: '班戈县',\n    542429: '巴青县',\n    542430: '尼玛县',\n    542431: '双湖县'\n  },\n  542500: {\n    542521: '普兰县',\n    542522: '札达县',\n    542523: '噶尔县',\n    542524: '日土县',\n    542525: '革吉县',\n    542526: '改则县',\n    542527: '措勤县'\n  },\n  610000: {\n    610100: '西安市',\n    610200: '铜川市',\n    610300: '宝鸡市',\n    610400: '咸阳市',\n    610500: '渭南市',\n    610600: '延安市',\n    610700: '汉中市',\n    610800: '榆林市',\n    610900: '安康市',\n    611000: '商洛市'\n  },\n  610100: {\n    610102: '新城区',\n    610103: '碑林区',\n    610104: '莲湖区',\n    610111: '灞桥区',\n    610112: '未央区',\n    610113: '雁塔区',\n    610114: '阎良区',\n    610115: '临潼区',\n    610116: '长安区',\n    610117: '高陵区',\n    610122: '蓝田县',\n    610124: '周至县',\n    610125: '鄠邑区'\n  },\n  610200: {\n    610202: '王益区',\n    610203: '印台区',\n    610204: '耀州区',\n    610222: '宜君县'\n  },\n  610300: {\n    610302: '渭滨区',\n    610303: '金台区',\n    610304: '陈仓区',\n    610322: '凤翔县',\n    610323: '岐山县',\n    610324: '扶风县',\n    610326: '眉县',\n    610327: '陇县',\n    610328: '千阳县',\n    610329: '麟游县',\n    610330: '凤县',\n    610331: '太白县'\n  },\n  610400: {\n    610402: '秦都区',\n    610403: '杨陵区',\n    610404: '渭城区',\n    610422: '三原县',\n    610423: '泾阳县',\n    610424: '乾县',\n    610425: '礼泉县',\n    610426: '永寿县',\n    610427: '彬县',\n    610428: '长武县',\n    610429: '旬邑县',\n    610430: '淳化县',\n    610431: '武功县',\n    610481: '兴平市'\n  },\n  610500: {\n    610502: '临渭区',\n    610503: '华州区',\n    610522: '潼关县',\n    610523: '大荔县',\n    610524: '合阳县',\n    610525: '澄城县',\n    610526: '蒲城县',\n    610527: '白水县',\n    610528: '富平县',\n    610581: '韩城市',\n    610582: '华阴市'\n  },\n  610600: {\n    610602: '宝塔区',\n    610621: '延长县',\n    610622: '延川县',\n    610623: '子长县',\n    610624: '安塞区',\n    610625: '志丹县',\n    610626: '吴起县',\n    610627: '甘泉县',\n    610628: '富县',\n    610629: '洛川县',\n    610630: '宜川县',\n    610631: '黄龙县',\n    610632: '黄陵县'\n  },\n  610700: {\n    610702: '汉台区',\n    610721: '南郑县',\n    610722: '城固县',\n    610723: '洋县',\n    610724: '西乡县',\n    610725: '勉县',\n    610726: '宁强县',\n    610727: '略阳县',\n    610728: '镇巴县',\n    610729: '留坝县',\n    610730: '佛坪县'\n  },\n  610800: {\n    610802: '榆阳区',\n    610803: '横山区',\n    610821: '神木县',\n    610822: '府谷县',\n    610824: '靖边县',\n    610825: '定边县',\n    610826: '绥德县',\n    610827: '米脂县',\n    610828: '佳县',\n    610829: '吴堡县',\n    610830: '清涧县',\n    610831: '子洲县'\n  },\n  610900: {\n    610902: '汉滨区',\n    610921: '汉阴县',\n    610922: '石泉县',\n    610923: '宁陕县',\n    610924: '紫阳县',\n    610925: '岚皋县',\n    610926: '平利县',\n    610927: '镇坪县',\n    610928: '旬阳县',\n    610929: '白河县'\n  },\n  611000: {\n    611002: '商州区',\n    611021: '洛南县',\n    611022: '丹凤县',\n    611023: '商南县',\n    611024: '山阳县',\n    611025: '镇安县',\n    611026: '柞水县'\n  },\n  620000: {\n    620100: '兰州市',\n    620200: '嘉峪关市',\n    620300: '金昌市',\n    620400: '白银市',\n    620500: '天水市',\n    620600: '武威市',\n    620700: '张掖市',\n    620800: '平凉市',\n    620900: '酒泉市',\n    621000: '庆阳市',\n    621100: '定西市',\n    621200: '陇南市',\n    622900: '临夏回族自治州',\n    623000: '甘南藏族自治州'\n  },\n  620100: {\n    620102: '城关区',\n    620103: '七里河区',\n    620104: '西固区',\n    620105: '安宁区',\n    620111: '红古区',\n    620121: '永登县',\n    620122: '皋兰县',\n    620123: '榆中县'\n  },\n  620300: {\n    620302: '金川区',\n    620321: '永昌县'\n  },\n  620400: {\n    620402: '白银区',\n    620403: '平川区',\n    620421: '靖远县',\n    620422: '会宁县',\n    620423: '景泰县'\n  },\n  620500: {\n    620502: '秦州区',\n    620503: '麦积区',\n    620521: '清水县',\n    620522: '秦安县',\n    620523: '甘谷县',\n    620524: '武山县',\n    620525: '张家川回族自治县'\n  },\n  620600: {\n    620602: '凉州区',\n    620621: '民勤县',\n    620622: '古浪县',\n    620623: '天祝藏族自治县'\n  },\n  620700: {\n    620702: '甘州区',\n    620721: '肃南裕固族自治县',\n    620722: '民乐县',\n    620723: '临泽县',\n    620724: '高台县',\n    620725: '山丹县'\n  },\n  620800: {\n    620802: '崆峒区',\n    620821: '泾川县',\n    620822: '灵台县',\n    620823: '崇信县',\n    620824: '华亭县',\n    620825: '庄浪县',\n    620826: '静宁县'\n  },\n  620900: {\n    620902: '肃州区',\n    620921: '金塔县',\n    620922: '瓜州县',\n    620923: '肃北蒙古族自治县',\n    620924: '阿克塞哈萨克族自治县',\n    620981: '玉门市',\n    620982: '敦煌市'\n  },\n  621000: {\n    621002: '西峰区',\n    621021: '庆城县',\n    621022: '环县',\n    621023: '华池县',\n    621024: '合水县',\n    621025: '正宁县',\n    621026: '宁县',\n    621027: '镇原县'\n  },\n  621100: {\n    621102: '安定区',\n    621121: '通渭县',\n    621122: '陇西县',\n    621123: '渭源县',\n    621124: '临洮县',\n    621125: '漳县',\n    621126: '岷县'\n  },\n  621200: {\n    621202: '武都区',\n    621221: '成县',\n    621222: '文县',\n    621223: '宕昌县',\n    621224: '康县',\n    621225: '西和县',\n    621226: '礼县',\n    621227: '徽县',\n    621228: '两当县'\n  },\n  622900: {\n    622901: '临夏市',\n    622921: '临夏县',\n    622922: '康乐县',\n    622923: '永靖县',\n    622924: '广河县',\n    622925: '和政县',\n    622926: '东乡族自治县',\n    622927: '积石山保安族东乡族撒拉族自治县'\n  },\n  623000: {\n    623001: '合作市',\n    623021: '临潭县',\n    623022: '卓尼县',\n    623023: '舟曲县',\n    623024: '迭部县',\n    623025: '玛曲县',\n    623026: '碌曲县',\n    623027: '夏河县'\n  },\n  630000: {\n    630100: '西宁市',\n    630200: '海东市',\n    632200: '海北藏族自治州',\n    632300: '黄南藏族自治州',\n    632500: '海南藏族自治州',\n    632600: '果洛藏族自治州',\n    632700: '玉树藏族自治州',\n    632800: '海西蒙古族藏族自治州'\n  },\n  630100: {\n    630102: '城东区',\n    630103: '城中区',\n    630104: '城西区',\n    630105: '城北区',\n    630121: '大通回族土族自治县',\n    630122: '湟中县',\n    630123: '湟源县'\n  },\n  630200: {\n    630202: '乐都区',\n    630203: '平安区',\n    630222: '民和回族土族自治县',\n    630223: '互助土族自治县',\n    630224: '化隆回族自治县',\n    630225: '循化撒拉族自治县'\n  },\n  632200: {\n    632221: '门源回族自治县',\n    632222: '祁连县',\n    632223: '海晏县',\n    632224: '刚察县'\n  },\n  632300: {\n    632321: '同仁县',\n    632322: '尖扎县',\n    632323: '泽库县',\n    632324: '河南蒙古族自治县'\n  },\n  632500: {\n    632521: '共和县',\n    632522: '同德县',\n    632523: '贵德县',\n    632524: '兴海县',\n    632525: '贵南县'\n  },\n  632600: {\n    632621: '玛沁县',\n    632622: '班玛县',\n    632623: '甘德县',\n    632624: '达日县',\n    632625: '久治县',\n    632626: '玛多县'\n  },\n  632700: {\n    632701: '玉树市',\n    632722: '杂多县',\n    632723: '称多县',\n    632724: '治多县',\n    632725: '囊谦县',\n    632726: '曲麻莱县'\n  },\n  632800: {\n    632801: '格尔木市',\n    632802: '德令哈市',\n    632821: '乌兰县',\n    632822: '都兰县',\n    632823: '天峻县',\n    632825: '海西蒙古族藏族自治州直辖'\n  },\n  640000: {\n    640100: '银川市',\n    640200: '石嘴山市',\n    640300: '吴忠市',\n    640400: '固原市',\n    640500: '中卫市'\n  },\n  640100: {\n    640104: '兴庆区',\n    640105: '西夏区',\n    640106: '金凤区',\n    640121: '永宁县',\n    640122: '贺兰县',\n    640181: '灵武市'\n  },\n  640200: {\n    640202: '大武口区',\n    640205: '惠农区',\n    640221: '平罗县'\n  },\n  640300: {\n    640302: '利通区',\n    640303: '红寺堡区',\n    640323: '盐池县',\n    640324: '同心县',\n    640381: '青铜峡市'\n  },\n  640400: {\n    640402: '原州区',\n    640422: '西吉县',\n    640423: '隆德县',\n    640424: '泾源县',\n    640425: '彭阳县'\n  },\n  640500: {\n    640502: '沙坡头区',\n    640521: '中宁县',\n    640522: '海原县'\n  },\n  650000: {\n    650100: '乌鲁木齐市',\n    650200: '克拉玛依市',\n    650400: '吐鲁番市',\n    650500: '哈密市',\n    652300: '昌吉回族自治州',\n    652700: '博尔塔拉蒙古自治州',\n    652800: '巴音郭楞蒙古自治州',\n    652900: '阿克苏地区',\n    653000: '克孜勒苏柯尔克孜自治州',\n    653100: '喀什地区',\n    653200: '和田地区',\n    654000: '伊犁哈萨克自治州',\n    654200: '塔城地区',\n    654300: '阿勒泰地区',\n    659001: '石河子市',\n    659002: '阿拉尔市',\n    659003: '图木舒克市',\n    659004: '五家渠市',\n    659005: '北屯市',\n    659006: '铁门关市',\n    659007: '双河市',\n    659008: '可克达拉市',\n    659009: '昆玉市'\n  },\n  650100: {\n    650102: '天山区',\n    650103: '沙依巴克区',\n    650104: '新市区',\n    650105: '水磨沟区',\n    650106: '头屯河区',\n    650107: '达坂城区',\n    650109: '米东区',\n    650121: '乌鲁木齐县'\n  },\n  650200: {\n    650202: '独山子区',\n    650203: '克拉玛依区',\n    650204: '白碱滩区',\n    650205: '乌尔禾区'\n  },\n  650400: {\n    650402: '高昌区',\n    650421: '鄯善县',\n    650422: '托克逊县'\n  },\n  650500: {\n    650502: '伊州区',\n    650521: '巴里坤哈萨克自治县',\n    650522: '伊吾县'\n  },\n  652300: {\n    652301: '昌吉市',\n    652302: '阜康市',\n    652323: '呼图壁县',\n    652324: '玛纳斯县',\n    652325: '奇台县',\n    652327: '吉木萨尔县',\n    652328: '木垒哈萨克自治县'\n  },\n  652700: {\n    652701: '博乐市',\n    652702: '阿拉山口市',\n    652722: '精河县',\n    652723: '温泉县'\n  },\n  652800: {\n    652801: '库尔勒市',\n    652822: '轮台县',\n    652823: '尉犁县',\n    652824: '若羌县',\n    652825: '且末县',\n    652826: '焉耆回族自治县',\n    652827: '和静县',\n    652828: '和硕县',\n    652829: '博湖县'\n  },\n  652900: {\n    652901: '阿克苏市',\n    652922: '温宿县',\n    652923: '库车县',\n    652924: '沙雅县',\n    652925: '新和县',\n    652926: '拜城县',\n    652927: '乌什县',\n    652928: '阿瓦提县',\n    652929: '柯坪县'\n  },\n  653000: {\n    653001: '阿图什市',\n    653022: '阿克陶县',\n    653023: '阿合奇县',\n    653024: '乌恰县'\n  },\n  653100: {\n    653101: '喀什市',\n    653121: '疏附县',\n    653122: '疏勒县',\n    653123: '英吉沙县',\n    653124: '泽普县',\n    653125: '莎车县',\n    653126: '叶城县',\n    653127: '麦盖提县',\n    653128: '岳普湖县',\n    653129: '伽师县',\n    653130: '巴楚县',\n    653131: '塔什库尔干塔吉克自治县'\n  },\n  653200: {\n    653201: '和田市',\n    653221: '和田县',\n    653222: '墨玉县',\n    653223: '皮山县',\n    653224: '洛浦县',\n    653225: '策勒县',\n    653226: '于田县',\n    653227: '民丰县'\n  },\n  654000: {\n    654002: '伊宁市',\n    654003: '奎屯市',\n    654004: '霍尔果斯市',\n    654021: '伊宁县',\n    654022: '察布查尔锡伯自治县',\n    654023: '霍城县',\n    654024: '巩留县',\n    654025: '新源县',\n    654026: '昭苏县',\n    654027: '特克斯县',\n    654028: '尼勒克县'\n  },\n  654200: {\n    654201: '塔城市',\n    654202: '乌苏市',\n    654221: '额敏县',\n    654223: '沙湾县',\n    654224: '托里县',\n    654225: '裕民县',\n    654226: '和布克赛尔蒙古自治县'\n  },\n  654300: {\n    654301: '阿勒泰市',\n    654321: '布尔津县',\n    654322: '富蕴县',\n    654323: '福海县',\n    654324: '哈巴河县',\n    654325: '青河县',\n    654326: '吉木乃县'\n  },\n  810000: {\n    810001: '中西区',\n    810002: '湾仔区',\n    810003: '东区',\n    810004: '南区',\n    810005: '油尖旺区',\n    810006: '深水埗区',\n    810007: '九龙城区',\n    810008: '黄大仙区',\n    810009: '观塘区',\n    810010: '荃湾区',\n    810011: '屯门区',\n    810012: '元朗区',\n    810013: '北区',\n    810014: '大埔区',\n    810015: '西贡区',\n    810016: '沙田区',\n    810017: '葵青区',\n    810018: '离岛区'\n  },\n  820000: {\n    820001: '花地玛堂区',\n    820002: '花王堂区',\n    820003: '望德堂区',\n    820004: '大堂区',\n    820005: '风顺堂区',\n    820006: '嘉模堂区',\n    820007: '路凼填海区',\n    820008: '圣方济各堂区'\n  }\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar set = function set(object, property, value, receiver) {\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent !== null) {\n      set(parent, property, value, receiver);\n    }\n  } else if (\"value\" in desc && desc.writable) {\n    desc.value = value;\n  } else {\n    var setter = desc.set;\n\n    if (setter !== undefined) {\n      setter.call(receiver, value);\n    }\n  }\n\n  return value;\n};\n\nvar NAMESPACE$1 = 'distpicker';\nvar EVENT_CHANGE = 'change.' + NAMESPACE$1;\nvar DEFAULT_CODE = 100000;\nvar PROVINCE = 'province';\nvar CITY = 'city';\nvar DISTRICT = 'district';\n\nvar Distpicker = function () {\n  function Distpicker(element, options) {\n    classCallCheck(this, Distpicker);\n\n    var self = this;\n\n    self.$element = $(element);\n    self.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options);\n    self.placeholders = $.extend({}, DEFAULTS);\n    self.ready = false;\n    self.init();\n  }\n\n  createClass(Distpicker, [{\n    key: 'init',\n    value: function init() {\n      var self = this;\n      var options = self.options;\n      var $selects = self.$element.find('select');\n      var length = $selects.length;\n      var data = {};\n\n      $selects.each(function (i, select) {\n        return $.extend(data, $(select).data());\n      });\n\n      $.each([PROVINCE, CITY, DISTRICT], function (i, type) {\n        if (data[type]) {\n          options[type] = data[type];\n          self['$' + type] = $selects.filter('[data-' + type + ']');\n        } else {\n          self['$' + type] = length > i ? $selects.eq(i) : null;\n        }\n      });\n\n      self.bind();\n\n      // Reset all the selects (after event binding)\n      self.reset();\n      self.ready = true;\n    }\n  }, {\n    key: 'bind',\n    value: function bind() {\n      var self = this;\n\n      if (self.$province) {\n        self.$province.on(EVENT_CHANGE, self.onChangeProvince = $.proxy(function () {\n          self.output(CITY);\n          self.output(DISTRICT);\n        }, self));\n      }\n\n      if (self.$city) {\n        self.$city.on(EVENT_CHANGE, self.onChangeCity = $.proxy(function () {\n          return self.output(DISTRICT);\n        }, self));\n      }\n    }\n  }, {\n    key: 'unbind',\n    value: function unbind() {\n      var self = this;\n\n      if (self.$province) {\n        self.$province.off(EVENT_CHANGE, self.onChangeProvince);\n      }\n\n      if (self.$city) {\n        self.$city.off(EVENT_CHANGE, self.onChangeCity);\n      }\n    }\n  }, {\n    key: 'output',\n    value: function output(type) {\n      var self = this;\n      var options = self.options;\n      var placeholders = self.placeholders;\n      var $select = self['$' + type];\n\n      if (!$select || !$select.length) {\n        return;\n      }\n\n      var code = void 0;\n\n      switch (type) {\n        case PROVINCE:\n          code = DEFAULT_CODE;\n          break;\n\n        case CITY:\n          code = self.$province && (self.$province.find(':selected').data('code') || '');\n          break;\n\n        case DISTRICT:\n          code = self.$city && (self.$city.find(':selected').data('code') || '');\n          break;\n      }\n\n      var districts = self.getDistricts(code);\n      var value = options[type];\n      var data = [];\n      var matched = false;\n\n      if ($.isPlainObject(districts)) {\n        $.each(districts, function (i, name) {\n          var selected = name === value;\n\n          if (options.valueType === 'code') {\n            selected = i === String(value);\n          }\n\n          if (selected) {\n            matched = true;\n          }\n\n          data.push({\n            code: i,\n            name: name,\n            value: options.valueType === 'name' ? name : i,\n            selected: selected\n          });\n        });\n      }\n\n      if (!matched) {\n        var autoselect = options.autoselect || options.autoSelect;\n\n        if (data.length && (type === PROVINCE && autoselect > 0 || type === CITY && autoselect > 1 || type === DISTRICT && autoselect > 2)) {\n          data[0].selected = true;\n        }\n\n        // Save the unmatched value as a placeholder at the first output\n        if (!self.ready && value) {\n          placeholders[type] = value;\n        }\n      }\n\n      // Add placeholder option\n      if (options.placeholder) {\n        data.unshift({\n          code: '',\n          name: placeholders[type],\n          value: '',\n          selected: false\n        });\n      }\n\n      if (data.length) {\n        $select.html(self.getList(data));\n      } else {\n        $select.empty();\n      }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'getList',\n    value: function getList(data) {\n      var list = [];\n\n      $.each(data, function (i, n) {\n        var attrs = ['data-code=\"' + n.code + '\"', 'data-text=\"' + n.name + '\"', 'value=\"' + n.value + '\"'];\n\n        if (n.selected) {\n          attrs.push('selected');\n        }\n\n        list.push('<option ' + attrs.join(' ') + '>' + n.name + '</option>');\n      });\n\n      return list.join('');\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'getDistricts',\n    value: function getDistricts() {\n      var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CODE;\n\n      return DISTRICTS[code] || null;\n    }\n  }, {\n    key: 'reset',\n    value: function reset(deep) {\n      var self = this;\n\n      if (!deep) {\n        self.output(PROVINCE);\n        self.output(CITY);\n        self.output(DISTRICT);\n      } else if (self.$province) {\n        self.$province.find(':first').prop('selected', true).trigger(EVENT_CHANGE);\n      }\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      var self = this;\n\n      self.unbind();\n      self.$element.removeData(NAMESPACE$1);\n    }\n  }], [{\n    key: 'setDefaults',\n    value: function setDefaults(options) {\n      $.extend(DEFAULTS, $.isPlainObject(options) && options);\n    }\n  }]);\n  return Distpicker;\n}();\n\nvar NAMESPACE = 'distpicker';\nvar OtherDistpicker = $.fn.distpicker;\n\n$.fn.distpicker = function jQueryDistpicker(option) {\n  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  var result = void 0;\n\n  this.each(function each() {\n    var $this = $(this);\n    var data = $this.data(NAMESPACE);\n\n    if (!data) {\n      if (/destroy/.test(option)) {\n        return;\n      }\n\n      var options = $.extend({}, $this.data(), $.isPlainObject(option) && option);\n      $this.data(NAMESPACE, data = new Distpicker(this, options));\n    }\n\n    if (typeof option === 'string') {\n      var fn = data[option];\n\n      if ($.isFunction(fn)) {\n        result = fn.apply(data, args);\n      }\n    }\n  });\n\n  return typeof result !== 'undefined' ? result : this;\n};\n\n$.fn.distpicker.Constructor = Distpicker;\n$.fn.distpicker.setDefaults = Distpicker.setDefaults;\n\n$.fn.distpicker.noConflict = function noConflict() {\n  $.fn.distpicker = OtherDistpicker;\n  return this;\n};\n\n$(function () {\n  $('[data-toggle=\"distpicker\"]').distpicker();\n});\n\n})));\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/goodsManage.js",
    "content": "\nvar activity = [];\nvar currentPage = 1;\n$(document).ready(function () {\n\n    var path = $(\"#path\").text();\n\n\n    to_page(path, 1);\n\n});\n\n/*$(document).ready(function () {\n    $(\".templatemo-edit-btn\").click(function () {\n        alert(\"asf\");\n        $(\"#update-goods\").modal({\n            backdrop:'static'\n        })\n    });\n});*/\n\n$(document).on(\"click\",\".description\",function () {\n    $(this).popover();\n});\n\n$(document).on(\"click\",\".templatemo-edit-btn\",function () {\n    $(\"#update-goods\").modal({\n        backdrop:'static'\n    });\n\n    //获取当前点击商品的数据\n    var upGoodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    var upGoodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var upGoodsPrice = $(this).parents(\"tr\").find(\"td:eq(2)\").text();\n    var upGoodsNum = $(this).parents(\"tr\").find(\"td:eq(3)\").text();\n    var upGoodsDetailCate = $(this).parents(\"tr\").find(\"td:eq(4)\").text();\n    var upGoodsDes = $(this).parents(\"tr\").find(\".description\").attr(\"data-content\");\n\n    $(\"#goodsid\").text(upGoodsid);\n    $(\"#goodsname\").val(upGoodsname);\n    $(\"#price\").val(upGoodsPrice);\n    $(\"#num\").val(upGoodsNum);\n    $(\"#detailcate\").val(upGoodsDetailCate);\n    $(\"#description\").val(upGoodsDes);\n});\n\n//修改商品信息\n$(document).on(\"click\",\"#saveUpdate\",function () {\n    var ugoodsid = $(\"#goodsid\").text();\n    var ugoodsname = $(\"#goodsname\").val();\n    var uprice = $(\"#price\").val();\n    var unum = $(\"#num\").val();\n    var udescription = $(\"#description\").val();\n    var ucategory = $(\"#category\").val();\n    var udetailcate = $(\"#detailcate\").val();\n\n    /*var option = {\n        url: '/shop/admin/goods/update/'+goodsid,\n        type:'post',\n    };\n    $(\"#update-goods\").ajaxForm(option);*/\n\n    $.ajax({\n        url:\"/shop/admin/goods/update/\",\n        type:\"POST\",\n        data:{\n            goodsid:ugoodsid,\n            goodsname:ugoodsname,\n            price:uprice,\n            num:unum,\n            description:udescription,\n            category:ucategory,\n            detailcate:udetailcate,\n        },\n        success:function(result){\n            $(\"#update-goods\").modal('hide');\n            swal(result.msg,'','success');\n            to_page('/shop',currentPage);\n        },\n        error:function(){\n            alert(\"错误！！\");\n        }\n    });\n\n    /*var goodsid = $(\"#goodsid\").text();\n    var updateForm = new FormData(document.getElementById(\"update-goods\"));\n    $.ajax({\n        url:\"/shop/admin/goods/update/\" + goodsid,\n        type:\"post\",\n        data:updateForm,\n        processData:false,\n        contentType:false,\n        success:function(result){\n            swal(result.msg,'','success');\n        },\n        error:function(){\n            alert(\"错误！！\");\n            window.clearInterval(timer);\n        }\n    });*/\n});\n\n$(document).on(\"click\",\".templatemo-delete-btn\",function () {\n    var goodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    swal({\n            title: \"确定删除\" + goodsname + \"吗？\",\n            type: \"warning\",\n            showCancelButton: true,\n            cancelButtonText:\"取消\",\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"确定删除！\",\n            closeOnConfirm: false,\n        },\n        function () {\n            /*swal(\"删除！\", \"你的虚拟文件已经被删除。\", \"success\");*/\n            $.ajax({\n                url: \"/shop/admin/goods/delete/\" + goodsid,\n                type: \"DELETE\",\n                success:function (result) {\n                    swal(result.msg, \"\",\"success\");\n                    to_page('/shop',currentPage);\n                },\n                error:function () {\n                    to_page('/shop',currentPage);\n                }\n            });\n        });\n});\n\n/*$(document).on(\"click\",\".templatemo-activity-btn\",function () {\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n\n});*/\n\nfunction showActInfo(activityId) {\n    $('#activityname').text(activity[activityId-1].activityname);\n    $('#activitydes').text(activity[activityId-1].activitydes);\n    $('#discount').text(activity[activityId-1].discount);\n    $('#fullprice').text(activity[activityId-1].fullprice);\n    $('#reduceprice').text(activity[activityId-1].reduceprice);\n    $('#fullnum').text(activity[activityId-1].fullnum);\n    $('#reducenum').text(activity[activityId-1].reducenum);\n}\n\n$(\"#activity-id\").change(function () {\n    showActInfo($(this).val());\n});\n\nfunction getActivity() {\n    $.ajax({\n        url: \"/shop/admin/activity/showjson\",\n        type: \"post\",\n        success: function (result) {\n            if(result.code==100) {\n                $(\"#activity-id\").empty();\n                activity = result.info.activity;\n                $.each(activity, function (index,item) {\n                    $(\"#activity-id\").append($(\"<option></option>\").attr(\"value\",item.activityid).append(item.activityid));\n                });\n                showActInfo(1);\n            } else {\n                alert(\"获取活动信息失败\");\n            }\n        }\n    });\n}\n\n//保存活动信息\n$(document).on(\"click\",\"#saveActivity\",function () {\n    var goodsid = $(\"#activity-goodsid\").text();\n    var activityid = $(\"#activity-id\").val();\n\n    $.ajax({\n        url:\"/shop/admin/activity/update/\",\n        type:\"POST\",\n        data:{\n            goodsid:goodsid,\n            activityid:activityid\n        },\n        success:function(result){\n            $(\"#activity-goods\").modal('hide');\n            swal(result.msg,'','success');\n            to_page('/shop', currentPage);\n        },\n        error:function(){\n            alert(\"错误！！\");\n        }\n    });\n});\n\nfunction to_page(path, page) {\n    $.ajax({\n        url: path + \"/admin/goods/showjson\",\n        data: \"page=\" + page,\n        type: \"get\",\n        success: function (result) {\n\n            //解析显示\n            build_goods_table(path, result);\n\n            //页面信息\n            build_page_info(path, result);\n\n            //分页\n            build_page_nav(path, result);\n\n            currentPage = page;\n        }\n    });\n}\n\nfunction build_goods_table(path,result) {\n    $(\"#goodsinfo tbody\").empty();\n    var goods = result.info.pageInfo.list;\n    $.each(goods, function (index,item) {\n        var goodsid = $(\"<td></td>\").append(item.goodsid);\n        var goodsname = $(\"<td></td>\").append(item.goodsname);\n        var price = $(\"<td></td>\").append(item.price);\n        var num = $(\"<td></td>\").append(item.num);\n        var detailcate = $(\"<td></td>\").append(item.detailcate);\n        var activityid = $(\"<td></td>\").append(item.activityid);\n\n        // var detailA = $('<a tabindex=\"0\" class=\"btn btn-sm description\" role=\"button\" placement=\"top\" data-toggle=\"popover\" data-trigger=\"focus\" title=\"描述\" ></a>').append(\"描述\");\n        var detailBtn = $('<button type=\"button\" class=\"description\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"top\"></button>').append(\"描述\");\n\n        detailBtn = detailBtn.attr(\"data-content\",item.description);\n\n        var detailA = $(\"<a></a>\").addClass(\"templatemo-link\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid).append(\"详情\");\n\n        var editBtn = $(\"<button></button>\").addClass(\"templatemo-edit-btn\").append(\"编辑\");\n        var deleteBtn = $(\"<button></button>\").addClass(\"templatemo-delete-btn\").append(\"删除\");\n\n        var desTd = $(\"<td hidden></td>\").append(detailBtn);\n\n        //活动按钮\n        var actBtn = $(\"<button></button>\").addClass(\"templatemo-activity-btn\").attr(\"data-actGoodsid\",item.goodsid).append(\"添加\");\n        actBtn.click(function () {\n            $(\"#activity-goods\").modal({\n                backdrop:'static'\n            });\n            $(\"#activity-goodsid\").text($(this).attr(\"data-actGoodsid\"));\n            getActivity();\n        });\n\n        var actTd = $(\"<td></td>\").append(actBtn);\n\n        var detailTd = $(\"<td></td>\").append(detailA);\n        var editTd = $(\"<td></td>\").append(editBtn);\n        var deleteTd = $(\"<td></td>\").append(deleteBtn);\n\n        $(\"<tr></tr>\").append(goodsid).append(goodsname).append(price).append(num).append(detailcate).append(activityid).append(desTd).append(detailTd).append(editTd).append(deleteTd).append(actTd).appendTo(\"#goodsinfo tbody\");\n    })\n}\n\nfunction build_page_info(path,result) {\n    $(\"#page-info-area\").empty();\n    $(\"#page-info-area\").append(\"当前第\"+ result.info.pageInfo.pageNum +\"页，总共\"+ result.info.pageInfo.pages +\"页，总共\"+ result.info.pageInfo.total +\"记录\")\n}\n\nfunction build_page_nav(path,result) {\n    $(\"#page-div-nav ul\").empty();\n    var pageUl = $(\"<ul></ul>\").addClass(\"pagination\")\n\n    var firstPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"首页\")));\n\n    var prePage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-backward\\\"></i></span>\")));\n\n    if(!result.info.pageInfo.hasPreviousPage) {\n        prePage.addClass(\"li-none\");\n    } else {\n        prePage.click(function () {\n            to_page('/shop',result.info.pageInfo.prePage);\n        });\n    }\n\n    //跳转\n    firstPage.click(function () {\n        to_page('/shop',1);\n    });\n\n    var nextPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-forward\\\"></i></span>\")));\n\n    var lastPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"末页\")));\n\n    if(!result.info.pageInfo.hasNextPage) {\n        nextPage.addClass(\"li-none\");\n    } else {\n        nextPage.click(function () {\n            to_page('/shop',result.info.pageInfo.nextPage);\n        });\n    }\n\n    lastPage.click(function () {\n        to_page('/shop',result.info.pageInfo.lastPage);\n    });\n\n    pageUl.append(firstPage).append(prePage);\n\n    $.each(result.info.pageInfo.navigatepageNums,function (index,item) {\n        var numLi = $(\"<li></li>\").append($(\"<a></a>\")\n            .append($(\"<span aria-hidden=\\\"true\\\"></span>\").append(item)));\n        if(result.info.pageInfo.pageNum === item) {\n            numLi.addClass(\"active\");\n        }\n        numLi.click(function () {\n            to_page('/shop',item);\n        });\n        pageUl.append(numLi);\n    });\n\n    pageUl.append(nextPage).append(lastPage).appendTo(\"#page-div-nav\");\n}\n\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/holder.js",
    "content": "/*!\n\nHolder - client side image placeholders\nVersion 2.9.0+f2dkw\n© 2015 Ivan Malopinsky - http://imsky.co\n\nSite:     http://holderjs.com\nIssues:   https://github.com/imsky/holder/issues\nLicense:  MIT\n\n*/\n(function (window) {\n  if (!window.document) return;\n  var document = window.document;\n\n  //https://github.com/inexorabletash/polyfill/blob/master/web.js\n    if (!document.querySelectorAll) {\n      document.querySelectorAll = function (selectors) {\n        var style = document.createElement('style'), elements = [], element;\n        document.documentElement.firstChild.appendChild(style);\n        document._qsa = [];\n\n        style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';\n        window.scrollBy(0, 0);\n        style.parentNode.removeChild(style);\n\n        while (document._qsa.length) {\n          element = document._qsa.shift();\n          element.style.removeAttribute('x-qsa');\n          elements.push(element);\n        }\n        document._qsa = null;\n        return elements;\n      };\n    }\n\n    if (!document.querySelector) {\n      document.querySelector = function (selectors) {\n        var elements = document.querySelectorAll(selectors);\n        return (elements.length) ? elements[0] : null;\n      };\n    }\n\n    if (!document.getElementsByClassName) {\n      document.getElementsByClassName = function (classNames) {\n        classNames = String(classNames).replace(/^|\\s+/g, '.');\n        return document.querySelectorAll(classNames);\n      };\n    }\n\n  //https://github.com/inexorabletash/polyfill\n  // ES5 15.2.3.14 Object.keys ( O )\n  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      if (o !== Object(o)) { throw TypeError('Object.keys called on non-object'); }\n      var ret = [], p;\n      for (p in o) {\n        if (Object.prototype.hasOwnProperty.call(o, p)) {\n          ret.push(p);\n        }\n      }\n      return ret;\n    };\n  }\n\n  // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n  // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n  if (!Array.prototype.forEach) {\n    Array.prototype.forEach = function (fun /*, thisp */) {\n      if (this === void 0 || this === null) { throw TypeError(); }\n\n      var t = Object(this);\n      var len = t.length >>> 0;\n      if (typeof fun !== \"function\") { throw TypeError(); }\n\n      var thisp = arguments[1], i;\n      for (i = 0; i < len; i++) {\n        if (i in t) {\n          fun.call(thisp, t[i], i, t);\n        }\n      }\n    };\n  }\n\n  //https://github.com/inexorabletash/polyfill/blob/master/web.js\n  (function (global) {\n    var B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    global.atob = global.atob || function (input) {\n      input = String(input);\n      var position = 0,\n          output = [],\n          buffer = 0, bits = 0, n;\n\n      input = input.replace(/\\s/g, '');\n      if ((input.length % 4) === 0) { input = input.replace(/=+$/, ''); }\n      if ((input.length % 4) === 1) { throw Error('InvalidCharacterError'); }\n      if (/[^+/0-9A-Za-z]/.test(input)) { throw Error('InvalidCharacterError'); }\n\n      while (position < input.length) {\n        n = B64_ALPHABET.indexOf(input.charAt(position));\n        buffer = (buffer << 6) | n;\n        bits += 6;\n\n        if (bits === 24) {\n          output.push(String.fromCharCode((buffer >> 16) & 0xFF));\n          output.push(String.fromCharCode((buffer >>  8) & 0xFF));\n          output.push(String.fromCharCode(buffer & 0xFF));\n          bits = 0;\n          buffer = 0;\n        }\n        position += 1;\n      }\n\n      if (bits === 12) {\n        buffer = buffer >> 4;\n        output.push(String.fromCharCode(buffer & 0xFF));\n      } else if (bits === 18) {\n        buffer = buffer >> 2;\n        output.push(String.fromCharCode((buffer >> 8) & 0xFF));\n        output.push(String.fromCharCode(buffer & 0xFF));\n      }\n\n      return output.join('');\n    };\n\n    global.btoa = global.btoa || function (input) {\n      input = String(input);\n      var position = 0,\n          out = [],\n          o1, o2, o3,\n          e1, e2, e3, e4;\n\n      if (/[^\\x00-\\xFF]/.test(input)) { throw Error('InvalidCharacterError'); }\n\n      while (position < input.length) {\n        o1 = input.charCodeAt(position++);\n        o2 = input.charCodeAt(position++);\n        o3 = input.charCodeAt(position++);\n\n        // 111111 112222 222233 333333\n        e1 = o1 >> 2;\n        e2 = ((o1 & 0x3) << 4) | (o2 >> 4);\n        e3 = ((o2 & 0xf) << 2) | (o3 >> 6);\n        e4 = o3 & 0x3f;\n\n        if (position === input.length + 2) {\n          e3 = 64; e4 = 64;\n        }\n        else if (position === input.length + 1) {\n          e4 = 64;\n        }\n\n        out.push(B64_ALPHABET.charAt(e1),\n                 B64_ALPHABET.charAt(e2),\n                 B64_ALPHABET.charAt(e3),\n                 B64_ALPHABET.charAt(e4));\n      }\n\n      return out.join('');\n    };\n  }(window));\n\n  //https://gist.github.com/jimeh/332357\n  if (!Object.prototype.hasOwnProperty){\n      /*jshint -W001, -W103 */\n      Object.prototype.hasOwnProperty = function(prop) {\n      var proto = this.__proto__ || this.constructor.prototype;\n      return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);\n    };\n      /*jshint +W001, +W103 */\n  }\n\n  // @license http://opensource.org/licenses/MIT\n  // copyright Paul Irish 2015\n\n\n  // Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill\n  //   github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js\n  // as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values\n\n  // if you want values similar to what you'd get with real perf.now, place this towards the head of the page\n  // but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed\n\n\n  (function(){\n\n    if ('performance' in window === false) {\n        window.performance = {};\n    }\n    \n    Date.now = (Date.now || function () {  // thanks IE8\n      return new Date().getTime();\n    });\n\n    if ('now' in window.performance === false){\n      \n      var nowOffset = Date.now();\n      \n      if (performance.timing && performance.timing.navigationStart){\n        nowOffset = performance.timing.navigationStart;\n      }\n\n      window.performance.now = function now(){\n        return Date.now() - nowOffset;\n      };\n    }\n\n  })();\n\n  //requestAnimationFrame polyfill for older Firefox/Chrome versions\n  if (!window.requestAnimationFrame) {\n    if (window.webkitRequestAnimationFrame) {\n    //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-webkit.js\n    (function (global) {\n      // window.requestAnimationFrame\n      global.requestAnimationFrame = function (callback) {\n        return webkitRequestAnimationFrame(function () {\n          callback(global.performance.now());\n        });\n      };\n\n      // window.cancelAnimationFrame\n      global.cancelAnimationFrame = webkitCancelAnimationFrame;\n    }(window));\n    } else if (window.mozRequestAnimationFrame) {\n      //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-moz.js\n    (function (global) {\n      // window.requestAnimationFrame\n      global.requestAnimationFrame = function (callback) {\n        return mozRequestAnimationFrame(function () {\n          callback(global.performance.now());\n        });\n      };\n\n      // window.cancelAnimationFrame\n      global.cancelAnimationFrame = mozCancelAnimationFrame;\n    }(window));\n    } else {\n    (function (global) {\n      global.requestAnimationFrame = function (callback) {\n      return global.setTimeout(callback, 1000 / 60);\n      };\n\n      global.cancelAnimationFrame = global.clearTimeout;\n    })(window);\n    }\n  }\n})(this);\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Holder\"] = factory();\n\telse\n\t\troot[\"Holder\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*\n\tHolder.js - client side image placeholders\n\t(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n\t*/\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/*\n\tHolder.js - client side image placeholders\n\t(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n\t*/\n\n\t//Libraries and functions\n\tvar onDomReady = __webpack_require__(2);\n\tvar querystring = __webpack_require__(3);\n\n\tvar SceneGraph = __webpack_require__(6);\n\tvar utils = __webpack_require__(7);\n\tvar SVG = __webpack_require__(8);\n\tvar DOM = __webpack_require__(9);\n\tvar Color = __webpack_require__(10);\n\tvar constants = __webpack_require__(11);\n\n\tvar svgRenderer = __webpack_require__(12);\n\tvar sgCanvasRenderer = __webpack_require__(15);\n\n\tvar extend = utils.extend;\n\tvar dimensionCheck = utils.dimensionCheck;\n\n\t//Constants and definitions\n\tvar SVG_NS = constants.svg_ns;\n\n\tvar Holder = {\n\t    version: constants.version,\n\n\t    /**\n\t     * Adds a theme to default settings\n\t     *\n\t     * @param {string} name Theme name\n\t     * @param {Object} theme Theme object, with foreground, background, size, font, and fontweight properties.\n\t     */\n\t    addTheme: function(name, theme) {\n\t        name != null && theme != null && (App.settings.themes[name] = theme);\n\t        delete App.vars.cache.themeKeys;\n\t        return this;\n\t    },\n\n\t    /**\n\t     * Appends a placeholder to an element\n\t     *\n\t     * @param {string} src Placeholder URL string\n\t     * @param el A selector or a reference to a DOM node\n\t     */\n\t    addImage: function(src, el) {\n\t        //todo: use jquery fallback if available for all QSA references\n\t        var nodes = DOM.getNodeArray(el);\n\t        nodes.forEach(function (node) {\n\t            var img = DOM.newEl('img');\n\t            var domProps = {};\n\t            domProps[App.setup.dataAttr] = src;\n\t            DOM.setAttr(img, domProps);\n\t            node.appendChild(img);\n\t        });\n\t        return this;\n\t    },\n\n\t    /**\n\t     * Sets whether or not an image is updated on resize.\n\t     * If an image is set to be updated, it is immediately rendered.\n\t     *\n\t     * @param {Object} el Image DOM element\n\t     * @param {Boolean} value Resizable update flag value\n\t     */\n\t    setResizeUpdate: function(el, value) {\n\t        if (el.holderData) {\n\t            el.holderData.resizeUpdate = !!value;\n\t            if (el.holderData.resizeUpdate) {\n\t                updateResizableElements(el);\n\t            }\n\t        }\n\t    },\n\n\t    /**\n\t     * Runs Holder with options. By default runs Holder on all images with \"holder.js\" in their source attributes.\n\t     *\n\t     * @param {Object} userOptions Options object, can contain domain, themes, images, and bgnodes properties\n\t     */\n\t    run: function(userOptions) {\n\t        //todo: split processing into separate queues\n\t        userOptions = userOptions || {};\n\t        var engineSettings = {};\n\t        var options = extend(App.settings, userOptions);\n\n\t        App.vars.preempted = true;\n\t        App.vars.dataAttr = options.dataAttr || App.setup.dataAttr;\n\n\t        engineSettings.renderer = options.renderer ? options.renderer : App.setup.renderer;\n\t        if (App.setup.renderers.join(',').indexOf(engineSettings.renderer) === -1) {\n\t            engineSettings.renderer = App.setup.supportsSVG ? 'svg' : (App.setup.supportsCanvas ? 'canvas' : 'html');\n\t        }\n\n\t        var images = DOM.getNodeArray(options.images);\n\t        var bgnodes = DOM.getNodeArray(options.bgnodes);\n\t        var stylenodes = DOM.getNodeArray(options.stylenodes);\n\t        var objects = DOM.getNodeArray(options.objects);\n\n\t        engineSettings.stylesheets = [];\n\t        engineSettings.svgXMLStylesheet = true;\n\t        engineSettings.noFontFallback = options.noFontFallback ? options.noFontFallback : false;\n\n\t        stylenodes.forEach(function (styleNode) {\n\t            if (styleNode.attributes.rel && styleNode.attributes.href && styleNode.attributes.rel.value == 'stylesheet') {\n\t                var href = styleNode.attributes.href.value;\n\t                //todo: write isomorphic relative-to-absolute URL function\n\t                var proxyLink = DOM.newEl('a');\n\t                proxyLink.href = href;\n\t                var stylesheetURL = proxyLink.protocol + '//' + proxyLink.host + proxyLink.pathname + proxyLink.search;\n\t                engineSettings.stylesheets.push(stylesheetURL);\n\t            }\n\t        });\n\n\t        bgnodes.forEach(function (bgNode) {\n\t            //Skip processing background nodes if getComputedStyle is unavailable, since only modern browsers would be able to use canvas or SVG to render to background\n\t            if (!global.getComputedStyle) return;\n\t            var backgroundImage = global.getComputedStyle(bgNode, null).getPropertyValue('background-image');\n\t            var dataBackgroundImage = bgNode.getAttribute('data-background-src');\n\t            var rawURL = dataBackgroundImage || backgroundImage;\n\n\t            var holderURL = null;\n\t            var holderString = options.domain + '/';\n\t            var holderStringIndex = rawURL.indexOf(holderString);\n\n\t            if (holderStringIndex === 0) {\n\t                holderURL = rawURL;\n\t            } else if (holderStringIndex === 1 && rawURL[0] === '?') {\n\t                holderURL = rawURL.slice(1);\n\t            } else {\n\t                var fragment = rawURL.substr(holderStringIndex).match(/([^\\\"]*)\"?\\)/);\n\t                if (fragment !== null) {\n\t                    holderURL = fragment[1];\n\t                } else if (rawURL.indexOf('url(') === 0) {\n\t                    throw 'Holder: unable to parse background URL: ' + rawURL;\n\t                }\n\t            }\n\n\t            if (holderURL != null) {\n\t                var holderFlags = parseURL(holderURL, options);\n\t                if (holderFlags) {\n\t                    prepareDOMElement({\n\t                        mode: 'background',\n\t                        el: bgNode,\n\t                        flags: holderFlags,\n\t                        engineSettings: engineSettings\n\t                    });\n\t                }\n\t            }\n\t        });\n\n\t        objects.forEach(function (object) {\n\t            var objectAttr = {};\n\n\t            try {\n\t                objectAttr.data = object.getAttribute('data');\n\t                objectAttr.dataSrc = object.getAttribute(App.vars.dataAttr);\n\t            } catch (e) {}\n\n\t            var objectHasSrcURL = objectAttr.data != null && objectAttr.data.indexOf(options.domain) === 0;\n\t            var objectHasDataSrcURL = objectAttr.dataSrc != null && objectAttr.dataSrc.indexOf(options.domain) === 0;\n\n\t            if (objectHasSrcURL) {\n\t                prepareImageElement(options, engineSettings, objectAttr.data, object);\n\t            } else if (objectHasDataSrcURL) {\n\t                prepareImageElement(options, engineSettings, objectAttr.dataSrc, object);\n\t            }\n\t        });\n\n\t        images.forEach(function (image) {\n\t            var imageAttr = {};\n\n\t            try {\n\t                imageAttr.src = image.getAttribute('src');\n\t                imageAttr.dataSrc = image.getAttribute(App.vars.dataAttr);\n\t                imageAttr.rendered = image.getAttribute('data-holder-rendered');\n\t            } catch (e) {}\n\n\t            var imageHasSrc = imageAttr.src != null;\n\t            var imageHasDataSrcURL = imageAttr.dataSrc != null && imageAttr.dataSrc.indexOf(options.domain) === 0;\n\t            var imageRendered = imageAttr.rendered != null && imageAttr.rendered == 'true';\n\n\t            if (imageHasSrc) {\n\t                if (imageAttr.src.indexOf(options.domain) === 0) {\n\t                    prepareImageElement(options, engineSettings, imageAttr.src, image);\n\t                } else if (imageHasDataSrcURL) {\n\t                    //Image has a valid data-src and an invalid src\n\t                    if (imageRendered) {\n\t                        //If the placeholder has already been render, re-render it\n\t                        prepareImageElement(options, engineSettings, imageAttr.dataSrc, image);\n\t                    } else {\n\t                        //If the placeholder has not been rendered, check if the image exists and render a fallback if it doesn't\n\t                        (function(src, options, engineSettings, dataSrc, image) {\n\t                            utils.imageExists(src, function(exists) {\n\t                                if (!exists) {\n\t                                    prepareImageElement(options, engineSettings, dataSrc, image);\n\t                                }\n\t                            });\n\t                        })(imageAttr.src, options, engineSettings, imageAttr.dataSrc, image);\n\t                    }\n\t                }\n\t            } else if (imageHasDataSrcURL) {\n\t                prepareImageElement(options, engineSettings, imageAttr.dataSrc, image);\n\t            }\n\t        });\n\n\t        return this;\n\t    }\n\t};\n\n\tvar App = {\n\t    settings: {\n\t        domain: 'holder.js',\n\t        images: 'img',\n\t        objects: 'object',\n\t        bgnodes: 'body .holderjs',\n\t        stylenodes: 'head link.holderjs',\n\t        themes: {\n\t            'gray': {\n\t                bg: '#EEEEEE',\n\t                fg: '#AAAAAA'\n\t            },\n\t            'social': {\n\t                bg: '#3a5a97',\n\t                fg: '#FFFFFF'\n\t            },\n\t            'industrial': {\n\t                bg: '#434A52',\n\t                fg: '#C2F200'\n\t            },\n\t            'sky': {\n\t                bg: '#0D8FDB',\n\t                fg: '#FFFFFF'\n\t            },\n\t            'vine': {\n\t                bg: '#39DBAC',\n\t                fg: '#1E292C'\n\t            },\n\t            'lava': {\n\t                bg: '#F8591A',\n\t                fg: '#1C2846'\n\t            }\n\t        }\n\t    },\n\t    defaults: {\n\t        size: 10,\n\t        units: 'pt',\n\t        scale: 1 / 16\n\t    }\n\t};\n\n\t/**\n\t * Processes provided source attribute and sets up the appropriate rendering workflow\n\t *\n\t * @private\n\t * @param options Instance options from Holder.run\n\t * @param renderSettings Instance configuration\n\t * @param src Image URL\n\t * @param el Image DOM element\n\t */\n\tfunction prepareImageElement(options, engineSettings, src, el) {\n\t    var holderFlags = parseURL(src.substr(src.lastIndexOf(options.domain)), options);\n\t    if (holderFlags) {\n\t        prepareDOMElement({\n\t            mode: null,\n\t            el: el,\n\t            flags: holderFlags,\n\t            engineSettings: engineSettings\n\t        });\n\t    }\n\t}\n\n\t/**\n\t * Processes a Holder URL and extracts configuration from query string\n\t *\n\t * @private\n\t * @param url URL\n\t * @param instanceOptions Instance options from Holder.run\n\t */\n\tfunction parseURL(url, instanceOptions) {\n\t    var holder = {\n\t        theme: extend(App.settings.themes.gray, null),\n\t        stylesheets: instanceOptions.stylesheets,\n\t        instanceOptions: instanceOptions\n\t    };\n\n\t    var parts = url.split('?');\n\t    var basics = parts[0].split('/');\n\n\t    holder.holderURL = url;\n\n\t    var dimensions = basics[1];\n\t    var dimensionData = dimensions.match(/([\\d]+p?)x([\\d]+p?)/);\n\n\t    if (!dimensionData) return false;\n\n\t    holder.fluid = dimensions.indexOf('p') !== -1;\n\n\t    holder.dimensions = {\n\t        width: dimensionData[1].replace('p', '%'),\n\t        height: dimensionData[2].replace('p', '%')\n\t    };\n\n\t    if (parts.length === 2) {\n\t        var options = querystring.parse(parts[1]);\n\n\t        // Colors\n\n\t        if (options.bg) {\n\t            holder.theme.bg = utils.parseColor(options.bg);\n\t        }\n\n\t        if (options.fg) {\n\t            holder.theme.fg = utils.parseColor(options.fg);\n\t        }\n\n\t        //todo: add automatic foreground to themes without foreground\n\t        if (options.bg && !options.fg) {\n\t            holder.autoFg = true;\n\t        }\n\n\t        if (options.theme && holder.instanceOptions.themes.hasOwnProperty(options.theme)) {\n\t            holder.theme = extend(holder.instanceOptions.themes[options.theme], null);\n\t        }\n\n\t        // Text\n\n\t        if (options.text) {\n\t            holder.text = options.text;\n\t        }\n\n\t        if (options.textmode) {\n\t            holder.textmode = options.textmode;\n\t        }\n\n\t        if (options.size) {\n\t            holder.size = options.size;\n\t        }\n\n\t        if (options.font) {\n\t            holder.font = options.font;\n\t        }\n\n\t        if (options.align) {\n\t            holder.align = options.align;\n\t        }\n\n\t        if (options.lineWrap) {\n\t            holder.lineWrap = options.lineWrap;\n\t        }\n\n\t        holder.nowrap = utils.truthy(options.nowrap);\n\n\t        // Miscellaneous\n\n\t        holder.auto = utils.truthy(options.auto);\n\n\t        holder.outline = utils.truthy(options.outline);\n\n\t        if (utils.truthy(options.random)) {\n\t            App.vars.cache.themeKeys = App.vars.cache.themeKeys || Object.keys(holder.instanceOptions.themes);\n\t            var _theme = App.vars.cache.themeKeys[0 | Math.random() * App.vars.cache.themeKeys.length];\n\t            holder.theme = extend(holder.instanceOptions.themes[_theme], null);\n\t        }\n\t    }\n\n\t    return holder;\n\t}\n\n\t/**\n\t * Modifies the DOM to fit placeholders and sets up resizable image callbacks (for fluid and automatically sized placeholders)\n\t *\n\t * @private\n\t * @param settings DOM prep settings\n\t */\n\tfunction prepareDOMElement(prepSettings) {\n\t    var mode = prepSettings.mode;\n\t    var el = prepSettings.el;\n\t    var flags = prepSettings.flags;\n\t    var _engineSettings = prepSettings.engineSettings;\n\t    var dimensions = flags.dimensions,\n\t        theme = flags.theme;\n\t    var dimensionsCaption = dimensions.width + 'x' + dimensions.height;\n\t    mode = mode == null ? (flags.fluid ? 'fluid' : 'image') : mode;\n\t    var holderTemplateRe = /holder_([a-z]+)/g;\n\t    var dimensionsInText = false;\n\n\t    if (flags.text != null) {\n\t        theme.text = flags.text;\n\n\t        //<object> SVG embedding doesn't parse Unicode properly\n\t        if (el.nodeName.toLowerCase() === 'object') {\n\t            var textLines = theme.text.split('\\\\n');\n\t            for (var k = 0; k < textLines.length; k++) {\n\t                textLines[k] = utils.encodeHtmlEntity(textLines[k]);\n\t            }\n\t            theme.text = textLines.join('\\\\n');\n\t        }\n\t    }\n\n\t    if (theme.text) {\n\t        var holderTemplateMatches = theme.text.match(holderTemplateRe);\n\n\t        if (holderTemplateMatches !== null) {\n\t            //todo: optimize template replacement\n\t            holderTemplateMatches.forEach(function (match) {\n\t                if (match === 'holder_dimensions') {\n\t                    theme.text = theme.text.replace(match, dimensionsCaption);\n\t                }\n\t            });\n\t        }\n\t    }\n\n\t    var holderURL = flags.holderURL;\n\t    var engineSettings = extend(_engineSettings, null);\n\n\t    if (flags.font) {\n\t        /*\n\t        If external fonts are used in a <img> placeholder rendered with SVG, Holder falls back to canvas.\n\n\t        This is done because Firefox and Chrome disallow embedded SVGs from referencing external assets.\n\t        The workaround is either to change the placeholder tag from <img> to <object> or to use the canvas renderer.\n\t        */\n\t        theme.font = flags.font;\n\t        if (!engineSettings.noFontFallback && el.nodeName.toLowerCase() === 'img' && App.setup.supportsCanvas && engineSettings.renderer === 'svg') {\n\t            engineSettings = extend(engineSettings, {\n\t                renderer: 'canvas'\n\t            });\n\t        }\n\t    }\n\n\t    //Chrome and Opera require a quick 10ms re-render if web fonts are used with canvas\n\t    if (flags.font && engineSettings.renderer == 'canvas') {\n\t        engineSettings.reRender = true;\n\t    }\n\n\t    if (mode == 'background') {\n\t        if (el.getAttribute('data-background-src') == null) {\n\t            DOM.setAttr(el, {\n\t                'data-background-src': holderURL\n\t            });\n\t        }\n\t    } else {\n\t        var domProps = {};\n\t        domProps[App.vars.dataAttr] = holderURL;\n\t        DOM.setAttr(el, domProps);\n\t    }\n\n\t    flags.theme = theme;\n\n\t    //todo consider using all renderSettings in holderData\n\t    el.holderData = {\n\t        flags: flags,\n\t        engineSettings: engineSettings\n\t    };\n\n\t    if (mode == 'image' || mode == 'fluid') {\n\t        DOM.setAttr(el, {\n\t            'alt': theme.text ? (dimensionsInText ? theme.text : theme.text + ' [' + dimensionsCaption + ']') : dimensionsCaption\n\t        });\n\t    }\n\n\t    var renderSettings = {\n\t        mode: mode,\n\t        el: el,\n\t        holderSettings: {\n\t            dimensions: dimensions,\n\t            theme: theme,\n\t            flags: flags\n\t        },\n\t        engineSettings: engineSettings\n\t    };\n\n\t    if (mode == 'image') {\n\t        if (!flags.auto) {\n\t            el.style.width = dimensions.width + 'px';\n\t            el.style.height = dimensions.height + 'px';\n\t        }\n\n\t        if (engineSettings.renderer == 'html') {\n\t            el.style.backgroundColor = theme.background;\n\t        } else {\n\t            render(renderSettings);\n\n\t            if (flags.textmode == 'exact') {\n\t                el.holderData.resizeUpdate = true;\n\t                App.vars.resizableImages.push(el);\n\t                updateResizableElements(el);\n\t            }\n\t        }\n\t    } else if (mode == 'background' && engineSettings.renderer != 'html') {\n\t        render(renderSettings);\n\t    } else if (mode == 'fluid') {\n\t        el.holderData.resizeUpdate = true;\n\n\t        if (dimensions.height.slice(-1) == '%') {\n\t            el.style.height = dimensions.height;\n\t        } else if (flags.auto == null || !flags.auto) {\n\t            el.style.height = dimensions.height + 'px';\n\t        }\n\t        if (dimensions.width.slice(-1) == '%') {\n\t            el.style.width = dimensions.width;\n\t        } else if (flags.auto == null || !flags.auto) {\n\t            el.style.width = dimensions.width + 'px';\n\t        }\n\t        if (el.style.display == 'inline' || el.style.display === '' || el.style.display == 'none') {\n\t            el.style.display = 'block';\n\t        }\n\n\t        setInitialDimensions(el);\n\n\t        if (engineSettings.renderer == 'html') {\n\t            el.style.backgroundColor = theme.background;\n\t        } else {\n\t            App.vars.resizableImages.push(el);\n\t            updateResizableElements(el);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Core function that takes output from renderers and sets it as the source or background-image of the target element\n\t *\n\t * @private\n\t * @param renderSettings Renderer settings\n\t */\n\tfunction render(renderSettings) {\n\t    var image = null;\n\t    var mode = renderSettings.mode;\n\t    var el = renderSettings.el;\n\t    var holderSettings = renderSettings.holderSettings;\n\t    var engineSettings = renderSettings.engineSettings;\n\n\t    switch (engineSettings.renderer) {\n\t        case 'svg':\n\t            if (!App.setup.supportsSVG) return;\n\t            break;\n\t        case 'canvas':\n\t            if (!App.setup.supportsCanvas) return;\n\t            break;\n\t        default:\n\t            return;\n\t    }\n\n\t    //todo: move generation of scene up to flag generation to reduce extra object creation\n\t    var scene = {\n\t        width: holderSettings.dimensions.width,\n\t        height: holderSettings.dimensions.height,\n\t        theme: holderSettings.theme,\n\t        flags: holderSettings.flags\n\t    };\n\n\t    var sceneGraph = buildSceneGraph(scene);\n\n\t    function getRenderedImage() {\n\t        var image = null;\n\t        switch (engineSettings.renderer) {\n\t            case 'canvas':\n\t                image = sgCanvasRenderer(sceneGraph, renderSettings);\n\t                break;\n\t            case 'svg':\n\t                image = svgRenderer(sceneGraph, renderSettings);\n\t                break;\n\t            default:\n\t                throw 'Holder: invalid renderer: ' + engineSettings.renderer;\n\t        }\n\n\t        return image;\n\t    }\n\n\t    image = getRenderedImage();\n\n\t    if (image == null) {\n\t        throw 'Holder: couldn\\'t render placeholder';\n\t    }\n\n\t    //todo: add <object> canvas rendering\n\t    if (mode == 'background') {\n\t        el.style.backgroundImage = 'url(' + image + ')';\n\t        el.style.backgroundSize = scene.width + 'px ' + scene.height + 'px';\n\t    } else {\n\t        if (el.nodeName.toLowerCase() === 'img') {\n\t            DOM.setAttr(el, {\n\t                'src': image\n\t            });\n\t        } else if (el.nodeName.toLowerCase() === 'object') {\n\t            DOM.setAttr(el, {\n\t                'data': image,\n\t                'type': 'image/svg+xml'\n\t            });\n\t        }\n\t        if (engineSettings.reRender) {\n\t            global.setTimeout(function () {\n\t                var image = getRenderedImage();\n\t                if (image == null) {\n\t                    throw 'Holder: couldn\\'t render placeholder';\n\t                }\n\t                //todo: refactor this code into a function\n\t                if (el.nodeName.toLowerCase() === 'img') {\n\t                    DOM.setAttr(el, {\n\t                        'src': image\n\t                    });\n\t                } else if (el.nodeName.toLowerCase() === 'object') {\n\t                    DOM.setAttr(el, {\n\t                        'data': image,\n\t                        'type': 'image/svg+xml'\n\t                    });\n\t                }\n\t            }, 150);\n\t        }\n\t    }\n\t    //todo: account for re-rendering\n\t    DOM.setAttr(el, {\n\t        'data-holder-rendered': true\n\t    });\n\t}\n\n\t/**\n\t * Core function that takes a Holder scene description and builds a scene graph\n\t *\n\t * @private\n\t * @param scene Holder scene object\n\t */\n\t//todo: make this function reusable\n\t//todo: merge app defaults and setup properties into the scene argument\n\tfunction buildSceneGraph(scene) {\n\t    var fontSize = App.defaults.size;\n\t    if (parseFloat(scene.theme.size)) {\n\t        fontSize = scene.theme.size;\n\t    } else if (parseFloat(scene.flags.size)) {\n\t        fontSize = scene.flags.size;\n\t    }\n\n\t    scene.font = {\n\t        family: scene.theme.font ? scene.theme.font : 'Arial, Helvetica, Open Sans, sans-serif',\n\t        size: textSize(scene.width, scene.height, fontSize, App.defaults.scale),\n\t        units: scene.theme.units ? scene.theme.units : App.defaults.units,\n\t        weight: scene.theme.fontweight ? scene.theme.fontweight : 'bold'\n\t    };\n\n\t    scene.text = scene.theme.text || Math.floor(scene.width) + 'x' + Math.floor(scene.height);\n\n\t    scene.noWrap = scene.theme.nowrap || scene.flags.nowrap;\n\n\t    scene.align = scene.theme.align || scene.flags.align || 'center';\n\n\t    switch (scene.flags.textmode) {\n\t        case 'literal':\n\t            scene.text = scene.flags.dimensions.width + 'x' + scene.flags.dimensions.height;\n\t            break;\n\t        case 'exact':\n\t            if (!scene.flags.exactDimensions) break;\n\t            scene.text = Math.floor(scene.flags.exactDimensions.width) + 'x' + Math.floor(scene.flags.exactDimensions.height);\n\t            break;\n\t    }\n\n\t    var lineWrap = scene.flags.lineWrap || App.setup.lineWrapRatio;\n\t    var sceneMargin = scene.width * lineWrap;\n\t    var maxLineWidth = sceneMargin;\n\n\t    var sceneGraph = new SceneGraph({\n\t        width: scene.width,\n\t        height: scene.height\n\t    });\n\n\t    var Shape = sceneGraph.Shape;\n\n\t    var holderBg = new Shape.Rect('holderBg', {\n\t        fill: scene.theme.bg\n\t    });\n\n\t    holderBg.resize(scene.width, scene.height);\n\t    sceneGraph.root.add(holderBg);\n\n\t    if (scene.flags.outline) {\n\t        var outlineColor = new Color(holderBg.properties.fill);\n\t        outlineColor = outlineColor.lighten(outlineColor.lighterThan('7f7f7f') ? -0.1 : 0.1);\n\t        holderBg.properties.outline = {\n\t            fill: outlineColor.toHex(true),\n\t            width: 2\n\t        };\n\t    }\n\n\t    var holderTextColor = scene.theme.fg;\n\n\t    if (scene.flags.autoFg) {\n\t        var holderBgColor = new Color(holderBg.properties.fill);\n\t        var lightColor = new Color('fff');\n\t        var darkColor = new Color('000', {\n\t            'alpha': 0.285714\n\t        });\n\n\t        holderTextColor = holderBgColor.blendAlpha(holderBgColor.lighterThan('7f7f7f') ? darkColor : lightColor).toHex(true);\n\t    }\n\n\t    var holderTextGroup = new Shape.Group('holderTextGroup', {\n\t        text: scene.text,\n\t        align: scene.align,\n\t        font: scene.font,\n\t        fill: holderTextColor\n\t    });\n\n\t    holderTextGroup.moveTo(null, null, 1);\n\t    sceneGraph.root.add(holderTextGroup);\n\n\t    var tpdata = holderTextGroup.textPositionData = stagingRenderer(sceneGraph);\n\t    if (!tpdata) {\n\t        throw 'Holder: staging fallback not supported yet.';\n\t    }\n\t    holderTextGroup.properties.leading = tpdata.boundingBox.height;\n\n\t    var textNode = null;\n\t    var line = null;\n\n\t    function finalizeLine(parent, line, width, height) {\n\t        line.width = width;\n\t        line.height = height;\n\t        parent.width = Math.max(parent.width, line.width);\n\t        parent.height += line.height;\n\t    }\n\n\t    if (tpdata.lineCount > 1) {\n\t        var offsetX = 0;\n\t        var offsetY = 0;\n\t        var lineIndex = 0;\n\t        var lineKey;\n\t        line = new Shape.Group('line' + lineIndex);\n\n\t        //Double margin so that left/right-aligned next is not flush with edge of image\n\t        if (scene.align === 'left' || scene.align === 'right') {\n\t            maxLineWidth = scene.width * (1 - (1 - lineWrap) * 2);\n\t        }\n\n\t        for (var i = 0; i < tpdata.words.length; i++) {\n\t            var word = tpdata.words[i];\n\t            textNode = new Shape.Text(word.text);\n\t            var newline = word.text == '\\\\n';\n\t            if (!scene.noWrap && (offsetX + word.width >= maxLineWidth || newline === true)) {\n\t                finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);\n\t                holderTextGroup.add(line);\n\t                offsetX = 0;\n\t                offsetY += holderTextGroup.properties.leading;\n\t                lineIndex += 1;\n\t                line = new Shape.Group('line' + lineIndex);\n\t                line.y = offsetY;\n\t            }\n\t            if (newline === true) {\n\t                continue;\n\t            }\n\t            textNode.moveTo(offsetX, 0);\n\t            offsetX += tpdata.spaceWidth + word.width;\n\t            line.add(textNode);\n\t        }\n\n\t        finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);\n\t        holderTextGroup.add(line);\n\n\t        if (scene.align === 'left') {\n\t            holderTextGroup.moveTo(scene.width - sceneMargin, null, null);\n\t        } else if (scene.align === 'right') {\n\t            for (lineKey in holderTextGroup.children) {\n\t                line = holderTextGroup.children[lineKey];\n\t                line.moveTo(scene.width - line.width, null, null);\n\t            }\n\n\t            holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);\n\t        } else {\n\t            for (lineKey in holderTextGroup.children) {\n\t                line = holderTextGroup.children[lineKey];\n\t                line.moveTo((holderTextGroup.width - line.width) / 2, null, null);\n\t            }\n\n\t            holderTextGroup.moveTo((scene.width - holderTextGroup.width) / 2, null, null);\n\t        }\n\n\t        holderTextGroup.moveTo(null, (scene.height - holderTextGroup.height) / 2, null);\n\n\t        //If the text exceeds vertical space, move it down so the first line is visible\n\t        if ((scene.height - holderTextGroup.height) / 2 < 0) {\n\t            holderTextGroup.moveTo(null, 0, null);\n\t        }\n\t    } else {\n\t        textNode = new Shape.Text(scene.text);\n\t        line = new Shape.Group('line0');\n\t        line.add(textNode);\n\t        holderTextGroup.add(line);\n\n\t        if (scene.align === 'left') {\n\t            holderTextGroup.moveTo(scene.width - sceneMargin, null, null);\n\t        } else if (scene.align === 'right') {\n\t            holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);\n\t        } else {\n\t            holderTextGroup.moveTo((scene.width - tpdata.boundingBox.width) / 2, null, null);\n\t        }\n\n\t        holderTextGroup.moveTo(null, (scene.height - tpdata.boundingBox.height) / 2, null);\n\t    }\n\n\t    //todo: renderlist\n\t    return sceneGraph;\n\t}\n\n\t/**\n\t * Adaptive text sizing function\n\t *\n\t * @private\n\t * @param width Parent width\n\t * @param height Parent height\n\t * @param fontSize Requested text size\n\t * @param scale Proportional scale of text\n\t */\n\tfunction textSize(width, height, fontSize, scale) {\n\t    var stageWidth = parseInt(width, 10);\n\t    var stageHeight = parseInt(height, 10);\n\n\t    var bigSide = Math.max(stageWidth, stageHeight);\n\t    var smallSide = Math.min(stageWidth, stageHeight);\n\n\t    var newHeight = 0.8 * Math.min(smallSide, bigSide * scale);\n\t    return Math.round(Math.max(fontSize, newHeight));\n\t}\n\n\t/**\n\t * Iterates over resizable (fluid or auto) placeholders and renders them\n\t *\n\t * @private\n\t * @param element Optional element selector, specified only if a specific element needs to be re-rendered\n\t */\n\tfunction updateResizableElements(element) {\n\t    var images;\n\t    if (element == null || element.nodeType == null) {\n\t        images = App.vars.resizableImages;\n\t    } else {\n\t        images = [element];\n\t    }\n\t    for (var i = 0, l = images.length; i < l; i++) {\n\t        var el = images[i];\n\t        if (el.holderData) {\n\t            var flags = el.holderData.flags;\n\t            var dimensions = dimensionCheck(el);\n\t            if (dimensions) {\n\t                if (!el.holderData.resizeUpdate) {\n\t                    continue;\n\t                }\n\n\t                if (flags.fluid && flags.auto) {\n\t                    var fluidConfig = el.holderData.fluidConfig;\n\t                    switch (fluidConfig.mode) {\n\t                        case 'width':\n\t                            dimensions.height = dimensions.width / fluidConfig.ratio;\n\t                            break;\n\t                        case 'height':\n\t                            dimensions.width = dimensions.height * fluidConfig.ratio;\n\t                            break;\n\t                    }\n\t                }\n\n\t                var settings = {\n\t                    mode: 'image',\n\t                    holderSettings: {\n\t                        dimensions: dimensions,\n\t                        theme: flags.theme,\n\t                        flags: flags\n\t                    },\n\t                    el: el,\n\t                    engineSettings: el.holderData.engineSettings\n\t                };\n\n\t                if (flags.textmode == 'exact') {\n\t                    flags.exactDimensions = dimensions;\n\t                    settings.holderSettings.dimensions = flags.dimensions;\n\t                }\n\n\t                render(settings);\n\t            } else {\n\t                setInvisible(el);\n\t            }\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Sets up aspect ratio metadata for fluid placeholders, in order to preserve proportions when resizing\n\t *\n\t * @private\n\t * @param el Image DOM element\n\t */\n\tfunction setInitialDimensions(el) {\n\t    if (el.holderData) {\n\t        var dimensions = dimensionCheck(el);\n\t        if (dimensions) {\n\t            var flags = el.holderData.flags;\n\n\t            var fluidConfig = {\n\t                fluidHeight: flags.dimensions.height.slice(-1) == '%',\n\t                fluidWidth: flags.dimensions.width.slice(-1) == '%',\n\t                mode: null,\n\t                initialDimensions: dimensions\n\t            };\n\n\t            if (fluidConfig.fluidWidth && !fluidConfig.fluidHeight) {\n\t                fluidConfig.mode = 'width';\n\t                fluidConfig.ratio = fluidConfig.initialDimensions.width / parseFloat(flags.dimensions.height);\n\t            } else if (!fluidConfig.fluidWidth && fluidConfig.fluidHeight) {\n\t                fluidConfig.mode = 'height';\n\t                fluidConfig.ratio = parseFloat(flags.dimensions.width) / fluidConfig.initialDimensions.height;\n\t            }\n\n\t            el.holderData.fluidConfig = fluidConfig;\n\t        } else {\n\t            setInvisible(el);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Iterates through all current invisible images, and if they're visible, renders them and removes them from further checks. Runs every animation frame.\n\t *\n\t * @private\n\t */\n\tfunction visibilityCheck() {\n\t    var renderableImages = [];\n\t    var keys = Object.keys(App.vars.invisibleImages);\n\t    var el;\n\n\t    keys.forEach(function (key) {\n\t        el = App.vars.invisibleImages[key];\n\t        if (dimensionCheck(el) && el.nodeName.toLowerCase() == 'img') {\n\t            renderableImages.push(el);\n\t            delete App.vars.invisibleImages[key];\n\t        }\n\t    });\n\n\t    if (renderableImages.length) {\n\t        Holder.run({\n\t            images: renderableImages\n\t        });\n\t    }\n\n\t    // Done to prevent 100% CPU usage via aggressive calling of requestAnimationFrame\n\t    setTimeout(function () {\n\t        global.requestAnimationFrame(visibilityCheck);\n\t    }, 10);\n\t}\n\n\t/**\n\t * Starts checking for invisible placeholders if not doing so yet. Does nothing otherwise.\n\t *\n\t * @private\n\t */\n\tfunction startVisibilityCheck() {\n\t    if (!App.vars.visibilityCheckStarted) {\n\t        global.requestAnimationFrame(visibilityCheck);\n\t        App.vars.visibilityCheckStarted = true;\n\t    }\n\t}\n\n\t/**\n\t * Sets a unique ID for an image detected to be invisible and adds it to the map of invisible images checked by visibilityCheck\n\t *\n\t * @private\n\t * @param el Invisible DOM element\n\t */\n\tfunction setInvisible(el) {\n\t    if (!el.holderData.invisibleId) {\n\t        App.vars.invisibleId += 1;\n\t        App.vars.invisibleImages['i' + App.vars.invisibleId] = el;\n\t        el.holderData.invisibleId = App.vars.invisibleId;\n\t    }\n\t}\n\n\t//todo: see if possible to convert stagingRenderer to use HTML only\n\tvar stagingRenderer = (function() {\n\t    var svg = null,\n\t        stagingText = null,\n\t        stagingTextNode = null;\n\t    return function(graph) {\n\t        var rootNode = graph.root;\n\t        if (App.setup.supportsSVG) {\n\t            var firstTimeSetup = false;\n\t            var tnode = function(text) {\n\t                return document.createTextNode(text);\n\t            };\n\t            if (svg == null || svg.parentNode !== document.body) {\n\t                firstTimeSetup = true;\n\t            }\n\n\t            svg = SVG.initSVG(svg, rootNode.properties.width, rootNode.properties.height);\n\t            //Show staging element before staging\n\t            svg.style.display = 'block';\n\n\t            if (firstTimeSetup) {\n\t                stagingText = DOM.newEl('text', SVG_NS);\n\t                stagingTextNode = tnode(null);\n\t                DOM.setAttr(stagingText, {\n\t                    x: 0\n\t                });\n\t                stagingText.appendChild(stagingTextNode);\n\t                svg.appendChild(stagingText);\n\t                document.body.appendChild(svg);\n\t                svg.style.visibility = 'hidden';\n\t                svg.style.position = 'absolute';\n\t                svg.style.top = '-100%';\n\t                svg.style.left = '-100%';\n\t                //todo: workaround for zero-dimension <svg> tag in Opera 12\n\t                //svg.setAttribute('width', 0);\n\t                //svg.setAttribute('height', 0);\n\t            }\n\n\t            var holderTextGroup = rootNode.children.holderTextGroup;\n\t            var htgProps = holderTextGroup.properties;\n\t            DOM.setAttr(stagingText, {\n\t                'y': htgProps.font.size,\n\t                'style': utils.cssProps({\n\t                    'font-weight': htgProps.font.weight,\n\t                    'font-size': htgProps.font.size + htgProps.font.units,\n\t                    'font-family': htgProps.font.family\n\t                })\n\t            });\n\n\t            //Get bounding box for the whole string (total width and height)\n\t            stagingTextNode.nodeValue = htgProps.text;\n\t            var stagingTextBBox = stagingText.getBBox();\n\n\t            //Get line count and split the string into words\n\t            var lineCount = Math.ceil(stagingTextBBox.width / rootNode.properties.width);\n\t            var words = htgProps.text.split(' ');\n\t            var newlines = htgProps.text.match(/\\\\n/g);\n\t            lineCount += newlines == null ? 0 : newlines.length;\n\n\t            //Get bounding box for the string with spaces removed\n\t            stagingTextNode.nodeValue = htgProps.text.replace(/[ ]+/g, '');\n\t            var computedNoSpaceLength = stagingText.getComputedTextLength();\n\n\t            //Compute average space width\n\t            var diffLength = stagingTextBBox.width - computedNoSpaceLength;\n\t            var spaceWidth = Math.round(diffLength / Math.max(1, words.length - 1));\n\n\t            //Get widths for every word with space only if there is more than one line\n\t            var wordWidths = [];\n\t            if (lineCount > 1) {\n\t                stagingTextNode.nodeValue = '';\n\t                for (var i = 0; i < words.length; i++) {\n\t                    if (words[i].length === 0) continue;\n\t                    stagingTextNode.nodeValue = utils.decodeHtmlEntity(words[i]);\n\t                    var bbox = stagingText.getBBox();\n\t                    wordWidths.push({\n\t                        text: words[i],\n\t                        width: bbox.width\n\t                    });\n\t                }\n\t            }\n\n\t            //Hide staging element after staging\n\t            svg.style.display = 'none';\n\n\t            return {\n\t                spaceWidth: spaceWidth,\n\t                lineCount: lineCount,\n\t                boundingBox: stagingTextBBox,\n\t                words: wordWidths\n\t            };\n\t        } else {\n\t            //todo: canvas fallback for measuring text on android 2.3\n\t            return false;\n\t        }\n\t    };\n\t})();\n\n\t//Helpers\n\n\t/**\n\t * Prevents a function from being called too often, waits until a timer elapses to call it again\n\t *\n\t * @param fn Function to call\n\t */\n\tfunction debounce(fn) {\n\t    if (!App.vars.debounceTimer) fn.call(this);\n\t    if (App.vars.debounceTimer) global.clearTimeout(App.vars.debounceTimer);\n\t    App.vars.debounceTimer = global.setTimeout(function() {\n\t        App.vars.debounceTimer = null;\n\t        fn.call(this);\n\t    }, App.setup.debounce);\n\t}\n\n\t/**\n\t * Holder-specific resize/orientation change callback, debounced to prevent excessive execution\n\t */\n\tfunction resizeEvent() {\n\t    debounce(function() {\n\t        updateResizableElements(null);\n\t    });\n\t}\n\n\t//Set up flags\n\n\tfor (var flag in App.flags) {\n\t    if (!App.flags.hasOwnProperty(flag)) continue;\n\t    App.flags[flag].match = function(val) {\n\t        return val.match(this.regex);\n\t    };\n\t}\n\n\t//Properties set once on setup\n\n\tApp.setup = {\n\t    renderer: 'html',\n\t    debounce: 100,\n\t    ratio: 1,\n\t    supportsCanvas: false,\n\t    supportsSVG: false,\n\t    lineWrapRatio: 0.9,\n\t    dataAttr: 'data-src',\n\t    renderers: ['html', 'canvas', 'svg']\n\t};\n\n\t//Properties modified during runtime\n\n\tApp.vars = {\n\t    preempted: false,\n\t    resizableImages: [],\n\t    invisibleImages: {},\n\t    invisibleId: 0,\n\t    visibilityCheckStarted: false,\n\t    debounceTimer: null,\n\t    cache: {}\n\t};\n\n\t//Pre-flight\n\n\t(function() {\n\t    var canvas = DOM.newEl('canvas');\n\n\t    if (canvas.getContext) {\n\t        if (canvas.toDataURL('image/png').indexOf('data:image/png') != -1) {\n\t            App.setup.renderer = 'canvas';\n\t            App.setup.supportsCanvas = true;\n\t        }\n\t    }\n\n\t    if (!!document.createElementNS && !!document.createElementNS(SVG_NS, 'svg').createSVGRect) {\n\t        App.setup.renderer = 'svg';\n\t        App.setup.supportsSVG = true;\n\t    }\n\t})();\n\n\t//Starts checking for invisible placeholders\n\tstartVisibilityCheck();\n\n\tif (onDomReady) {\n\t    onDomReady(function() {\n\t        if (!App.vars.preempted) {\n\t            Holder.run();\n\t        }\n\t        if (global.addEventListener) {\n\t            global.addEventListener('resize', resizeEvent, false);\n\t            global.addEventListener('orientationchange', resizeEvent, false);\n\t        } else {\n\t            global.attachEvent('onresize', resizeEvent);\n\t        }\n\n\t        if (typeof global.Turbolinks == 'object') {\n\t            global.document.addEventListener('page:change', function() {\n\t                Holder.run();\n\t            });\n\t        }\n\t    });\n\t}\n\n\tmodule.exports = Holder;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * onDomReady.js 1.4.0 (c) 2013 Tubal Martin - MIT license\n\t *\n\t * Specially modified to work with Holder.js\n\t */\n\n\tfunction _onDomReady(win) {\n\t    //Lazy loading fix for Firefox < 3.6\n\t    //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n\t    if (document.readyState == null && document.addEventListener) {\n\t        document.addEventListener(\"DOMContentLoaded\", function DOMContentLoaded() {\n\t            document.removeEventListener(\"DOMContentLoaded\", DOMContentLoaded, false);\n\t            document.readyState = \"complete\";\n\t        }, false);\n\t        document.readyState = \"loading\";\n\t    }\n\t    \n\t    var doc = win.document,\n\t        docElem = doc.documentElement,\n\t    \n\t        LOAD = \"load\",\n\t        FALSE = false,\n\t        ONLOAD = \"on\"+LOAD,\n\t        COMPLETE = \"complete\",\n\t        READYSTATE = \"readyState\",\n\t        ATTACHEVENT = \"attachEvent\",\n\t        DETACHEVENT = \"detachEvent\",\n\t        ADDEVENTLISTENER = \"addEventListener\",\n\t        DOMCONTENTLOADED = \"DOMContentLoaded\",\n\t        ONREADYSTATECHANGE = \"onreadystatechange\",\n\t        REMOVEEVENTLISTENER = \"removeEventListener\",\n\t    \n\t        // W3C Event model\n\t        w3c = ADDEVENTLISTENER in doc,\n\t        _top = FALSE,\n\t    \n\t        // isReady: Is the DOM ready to be used? Set to true once it occurs.\n\t        isReady = FALSE,\n\t    \n\t        // Callbacks pending execution until DOM is ready\n\t        callbacks = [];\n\t    \n\t    // Handle when the DOM is ready\n\t    function ready( fn ) {\n\t        if ( !isReady ) {\n\t    \n\t            // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t            if ( !doc.body ) {\n\t                return defer( ready );\n\t            }\n\t    \n\t            // Remember that the DOM is ready\n\t            isReady = true;\n\t    \n\t            // Execute all callbacks\n\t            while ( fn = callbacks.shift() ) {\n\t                defer( fn );\n\t            }\n\t        }\n\t    }\n\t    \n\t    // The ready event handler\n\t    function completed( event ) {\n\t        // readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t        if ( w3c || event.type === LOAD || doc[READYSTATE] === COMPLETE ) {\n\t            detach();\n\t            ready();\n\t        }\n\t    }\n\t    \n\t    // Clean-up method for dom ready events\n\t    function detach() {\n\t        if ( w3c ) {\n\t            doc[REMOVEEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\t            win[REMOVEEVENTLISTENER]( LOAD, completed, FALSE );\n\t        } else {\n\t            doc[DETACHEVENT]( ONREADYSTATECHANGE, completed );\n\t            win[DETACHEVENT]( ONLOAD, completed );\n\t        }\n\t    }\n\t    \n\t    // Defers a function, scheduling it to run after the current call stack has cleared.\n\t    function defer( fn, wait ) {\n\t        // Allow 0 to be passed\n\t        setTimeout( fn, +wait >= 0 ? wait : 1 );\n\t    }\n\t    \n\t    // Attach the listeners:\n\t    \n\t    // Catch cases where onDomReady is called after the browser event has already occurred.\n\t    // we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t    // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t    if ( doc[READYSTATE] === COMPLETE ) {\n\t        // Handle it asynchronously to allow scripts the opportunity to delay ready\n\t        defer( ready );\n\t    \n\t    // Standards-based browsers support DOMContentLoaded\n\t    } else if ( w3c ) {\n\t        // Use the handy event callback\n\t        doc[ADDEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\t    \n\t        // A fallback to window.onload, that will always work\n\t        win[ADDEVENTLISTENER]( LOAD, completed, FALSE );\n\t    \n\t    // If IE event model is used\n\t    } else {\n\t        // Ensure firing before onload, maybe late but safe also for iframes\n\t        doc[ATTACHEVENT]( ONREADYSTATECHANGE, completed );\n\t    \n\t        // A fallback to window.onload, that will always work\n\t        win[ATTACHEVENT]( ONLOAD, completed );\n\t    \n\t        // If IE and not a frame\n\t        // continually check to see if the document is ready\n\t        try {\n\t            _top = win.frameElement == null && docElem;\n\t        } catch(e) {}\n\t    \n\t        if ( _top && _top.doScroll ) {\n\t            (function doScrollCheck() {\n\t                if ( !isReady ) {\n\t                    try {\n\t                        // Use the trick by Diego Perini\n\t                        // http://javascript.nwbox.com/IEContentLoaded/\n\t                        _top.doScroll(\"left\");\n\t                    } catch(e) {\n\t                        return defer( doScrollCheck, 50 );\n\t                    }\n\t    \n\t                    // detach all dom ready events\n\t                    detach();\n\t    \n\t                    // and execute any waiting functions\n\t                    ready();\n\t                }\n\t            })();\n\t        }\n\t    }\n\t    \n\t    function onDomReady( fn ) {\n\t        // If DOM is ready, execute the function (async), otherwise wait\n\t        isReady ? defer( fn ) : callbacks.push( fn );\n\t    }\n\t    \n\t    // Add version\n\t    onDomReady.version = \"1.4.0\";\n\t    // Add method to check if DOM is ready\n\t    onDomReady.isReady = function(){\n\t        return isReady;\n\t    };\n\n\t    return onDomReady;\n\t}\n\n\tmodule.exports = typeof window !== \"undefined\" && _onDomReady(window);\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//Modified version of component/querystring\n\t//Changes: updated dependencies, dot notation parsing, JSHint fixes\n\t//Fork at https://github.com/imsky/querystring\n\n\t/**\n\t * Module dependencies.\n\t */\n\n\tvar encode = encodeURIComponent;\n\tvar decode = decodeURIComponent;\n\tvar trim = __webpack_require__(4);\n\tvar type = __webpack_require__(5);\n\n\tvar arrayRegex = /(\\w+)\\[(\\d+)\\]/;\n\tvar objectRegex = /\\w+\\.\\w+/;\n\n\t/**\n\t * Parse the given query `str`.\n\t *\n\t * @param {String} str\n\t * @return {Object}\n\t * @api public\n\t */\n\n\texports.parse = function(str){\n\t  if ('string' !== typeof str) return {};\n\n\t  str = trim(str);\n\t  if ('' === str) return {};\n\t  if ('?' === str.charAt(0)) str = str.slice(1);\n\n\t  var obj = {};\n\t  var pairs = str.split('&');\n\t  for (var i = 0; i < pairs.length; i++) {\n\t    var parts = pairs[i].split('=');\n\t    var key = decode(parts[0]);\n\t    var m, ctx, prop;\n\n\t    if (m = arrayRegex.exec(key)) {\n\t      obj[m[1]] = obj[m[1]] || [];\n\t      obj[m[1]][m[2]] = decode(parts[1]);\n\t      continue;\n\t    }\n\n\t    if (m = objectRegex.test(key)) {\n\t      m = key.split('.');\n\t      ctx = obj;\n\t      \n\t      while (m.length) {\n\t        prop = m.shift();\n\n\t        if (!prop.length) continue;\n\n\t        if (!ctx[prop]) {\n\t          ctx[prop] = {};\n\t        } else if (ctx[prop] && typeof ctx[prop] !== 'object') {\n\t          break;\n\t        }\n\n\t        if (!m.length) {\n\t          ctx[prop] = decode(parts[1]);\n\t        }\n\n\t        ctx = ctx[prop];\n\t      }\n\n\t      continue;\n\t    }\n\n\t    obj[parts[0]] = null == parts[1] ? '' : decode(parts[1]);\n\t  }\n\n\t  return obj;\n\t};\n\n\t/**\n\t * Stringify the given `obj`.\n\t *\n\t * @param {Object} obj\n\t * @return {String}\n\t * @api public\n\t */\n\n\texports.stringify = function(obj){\n\t  if (!obj) return '';\n\t  var pairs = [];\n\n\t  for (var key in obj) {\n\t    var value = obj[key];\n\n\t    if ('array' == type(value)) {\n\t      for (var i = 0; i < value.length; ++i) {\n\t        pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));\n\t      }\n\t      continue;\n\t    }\n\n\t    pairs.push(encode(key) + '=' + encode(obj[key]));\n\t  }\n\n\t  return pairs.join('&');\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\n\texports = module.exports = trim;\n\n\tfunction trim(str){\n\t  return str.replace(/^\\s*|\\s*$/g, '');\n\t}\n\n\texports.left = function(str){\n\t  return str.replace(/^\\s*/, '');\n\t};\n\n\texports.right = function(str){\n\t  return str.replace(/\\s*$/, '');\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t/**\n\t * toString ref.\n\t */\n\n\tvar toString = Object.prototype.toString;\n\n\t/**\n\t * Return the type of `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {String}\n\t * @api public\n\t */\n\n\tmodule.exports = function(val){\n\t  switch (toString.call(val)) {\n\t    case '[object Date]': return 'date';\n\t    case '[object RegExp]': return 'regexp';\n\t    case '[object Arguments]': return 'arguments';\n\t    case '[object Array]': return 'array';\n\t    case '[object Error]': return 'error';\n\t  }\n\n\t  if (val === null) return 'null';\n\t  if (val === undefined) return 'undefined';\n\t  if (val !== val) return 'nan';\n\t  if (val && val.nodeType === 1) return 'element';\n\n\t  val = val.valueOf\n\t    ? val.valueOf()\n\t    : Object.prototype.valueOf.apply(val)\n\n\t  return typeof val;\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\tvar SceneGraph = function(sceneProperties) {\n\t    var nodeCount = 1;\n\n\t    //todo: move merge to helpers section\n\t    function merge(parent, child) {\n\t        for (var prop in child) {\n\t            parent[prop] = child[prop];\n\t        }\n\t        return parent;\n\t    }\n\n\t    var SceneNode = function(name) {\n\t        nodeCount++;\n\t        this.parent = null;\n\t        this.children = {};\n\t        this.id = nodeCount;\n\t        this.name = 'n' + nodeCount;\n\t        if (typeof name !== 'undefined') {\n\t            this.name = name;\n\t        }\n\t        this.x = this.y = this.z = 0;\n\t        this.width = this.height = 0;\n\t    };\n\n\t    SceneNode.prototype.resize = function(width, height) {\n\t        if (width != null) {\n\t            this.width = width;\n\t        }\n\t        if (height != null) {\n\t            this.height = height;\n\t        }\n\t    };\n\n\t    SceneNode.prototype.moveTo = function(x, y, z) {\n\t        this.x = x != null ? x : this.x;\n\t        this.y = y != null ? y : this.y;\n\t        this.z = z != null ? z : this.z;\n\t    };\n\n\t    SceneNode.prototype.add = function(child) {\n\t        var name = child.name;\n\t        if (typeof this.children[name] === 'undefined') {\n\t            this.children[name] = child;\n\t            child.parent = this;\n\t        } else {\n\t            throw 'SceneGraph: child already exists: ' + name;\n\t        }\n\t    };\n\n\t    var RootNode = function() {\n\t        SceneNode.call(this, 'root');\n\t        this.properties = sceneProperties;\n\t    };\n\n\t    RootNode.prototype = new SceneNode();\n\n\t    var Shape = function(name, props) {\n\t        SceneNode.call(this, name);\n\t        this.properties = {\n\t            'fill': '#000000'\n\t        };\n\t        if (typeof props !== 'undefined') {\n\t            merge(this.properties, props);\n\t        } else if (typeof name !== 'undefined' && typeof name !== 'string') {\n\t            throw 'SceneGraph: invalid node name';\n\t        }\n\t    };\n\n\t    Shape.prototype = new SceneNode();\n\n\t    var Group = function() {\n\t        Shape.apply(this, arguments);\n\t        this.type = 'group';\n\t    };\n\n\t    Group.prototype = new Shape();\n\n\t    var Rect = function() {\n\t        Shape.apply(this, arguments);\n\t        this.type = 'rect';\n\t    };\n\n\t    Rect.prototype = new Shape();\n\n\t    var Text = function(text) {\n\t        Shape.call(this);\n\t        this.type = 'text';\n\t        this.properties.text = text;\n\t    };\n\n\t    Text.prototype = new Shape();\n\n\t    var root = new RootNode();\n\n\t    this.Shape = {\n\t        'Rect': Rect,\n\t        'Text': Text,\n\t        'Group': Group\n\t    };\n\n\t    this.root = root;\n\t    return this;\n\t};\n\n\tmodule.exports = SceneGraph;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Shallow object clone and merge\n\t *\n\t * @param a Object A\n\t * @param b Object B\n\t * @returns {Object} New object with all of A's properties, and all of B's properties, overwriting A's properties\n\t */\n\texports.extend = function(a, b) {\n\t    var c = {};\n\t    for (var x in a) {\n\t        if (a.hasOwnProperty(x)) {\n\t            c[x] = a[x];\n\t        }\n\t    }\n\t    if (b != null) {\n\t        for (var y in b) {\n\t            if (b.hasOwnProperty(y)) {\n\t                c[y] = b[y];\n\t            }\n\t        }\n\t    }\n\t    return c;\n\t};\n\n\t/**\n\t * Takes a k/v list of CSS properties and returns a rule\n\t *\n\t * @param props CSS properties object\n\t */\n\texports.cssProps = function(props) {\n\t    var ret = [];\n\t    for (var p in props) {\n\t        if (props.hasOwnProperty(p)) {\n\t            ret.push(p + ':' + props[p]);\n\t        }\n\t    }\n\t    return ret.join(';');\n\t};\n\n\t/**\n\t * Encodes HTML entities in a string\n\t *\n\t * @param str Input string\n\t */\n\texports.encodeHtmlEntity = function(str) {\n\t    var buf = [];\n\t    var charCode = 0;\n\t    for (var i = str.length - 1; i >= 0; i--) {\n\t        charCode = str.charCodeAt(i);\n\t        if (charCode > 128) {\n\t            buf.unshift(['&#', charCode, ';'].join(''));\n\t        } else {\n\t            buf.unshift(str[i]);\n\t        }\n\t    }\n\t    return buf.join('');\n\t};\n\n\t/**\n\t * Checks if an image exists\n\t *\n\t * @param src URL of image\n\t * @param callback Callback to call once image status has been found\n\t */\n\texports.imageExists = function(src, callback) {\n\t    var image = new Image();\n\t    image.onerror = function() {\n\t        callback.call(this, false);\n\t    };\n\t    image.onload = function() {\n\t        callback.call(this, true);\n\t    };\n\t    image.src = src;\n\t};\n\n\t/**\n\t * Decodes HTML entities in a string\n\t *\n\t * @param str Input string\n\t */\n\texports.decodeHtmlEntity = function(str) {\n\t    return str.replace(/&#(\\d+);/g, function(match, dec) {\n\t        return String.fromCharCode(dec);\n\t    });\n\t};\n\n\n\t/**\n\t * Returns an element's dimensions if it's visible, `false` otherwise.\n\t *\n\t * @param el DOM element\n\t */\n\texports.dimensionCheck = function(el) {\n\t    var dimensions = {\n\t        height: el.clientHeight,\n\t        width: el.clientWidth\n\t    };\n\n\t    if (dimensions.height && dimensions.width) {\n\t        return dimensions;\n\t    } else {\n\t        return false;\n\t    }\n\t};\n\n\n\t/**\n\t * Returns true if value is truthy or if it is \"semantically truthy\"\n\t * @param val\n\t */\n\texports.truthy = function(val) {\n\t    if (typeof val === 'string') {\n\t        return val === 'true' || val === 'yes' || val === '1' || val === 'on' || val === '✓';\n\t    }\n\t    return !!val;\n\t};\n\n\t/**\n\t * Parses input into a well-formed CSS color\n\t * @param val\n\t */\n\texports.parseColor = function(val) {\n\t    var hexre = /(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i;\n\t    var rgbre = /^rgb\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;\n\t    var rgbare = /^rgba\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(0\\.\\d{1,}|1)\\)$/;\n\n\t    var match = val.match(hexre);\n\t    var retval;\n\n\t    if (match !== null) {\n\t        retval = match[1] || match[2];\n\t        if (retval[0] !== '#') {\n\t            return '#' + retval;\n\t        } else {\n\t            return retval;\n\t        }\n\t    }\n\n\t    match = val.match(rgbre);\n\n\t    if (match !== null) {\n\t        retval = 'rgb(' + match.slice(1).join(',') + ')';\n\t        return retval;\n\t    }\n\n\t    match = val.match(rgbare);\n\n\t    if (match !== null) {\n\t        retval = 'rgba(' + match.slice(1).join(',') + ')';\n\t        return retval;\n\t    }\n\n\t    return null;\n\t};\n\n\t/**\n\t * Provides the correct scaling ratio for canvas drawing operations on HiDPI screens (e.g. Retina displays)\n\t */\n\texports.canvasRatio = function () {\n\t    var devicePixelRatio = 1;\n\t    var backingStoreRatio = 1;\n\n\t    if (global.document) {\n\t        var canvas = global.document.createElement('canvas');\n\t        if (canvas.getContext) {\n\t            var ctx = canvas.getContext('2d');\n\t            devicePixelRatio = global.devicePixelRatio || 1;\n\t            backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\n\t        }\n\t    }\n\n\t    return devicePixelRatio / backingStoreRatio;\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var DOM = __webpack_require__(9);\n\n\tvar SVG_NS = 'http://www.w3.org/2000/svg';\n\tvar NODE_TYPE_COMMENT = 8;\n\n\t/**\n\t * Generic SVG element creation function\n\t *\n\t * @param svg SVG context, set to null if new\n\t * @param width Document width\n\t * @param height Document height\n\t */\n\texports.initSVG = function(svg, width, height) {\n\t    var defs, style, initialize = false;\n\n\t    if (svg && svg.querySelector) {\n\t        style = svg.querySelector('style');\n\t        if (style === null) {\n\t            initialize = true;\n\t        }\n\t    } else {\n\t        svg = DOM.newEl('svg', SVG_NS);\n\t        initialize = true;\n\t    }\n\n\t    if (initialize) {\n\t        defs = DOM.newEl('defs', SVG_NS);\n\t        style = DOM.newEl('style', SVG_NS);\n\t        DOM.setAttr(style, {\n\t            'type': 'text/css'\n\t        });\n\t        defs.appendChild(style);\n\t        svg.appendChild(defs);\n\t    }\n\n\t    //IE throws an exception if this is set and Chrome requires it to be set\n\t    if (svg.webkitMatchesSelector) {\n\t        svg.setAttribute('xmlns', SVG_NS);\n\t    }\n\n\t    //Remove comment nodes\n\t    for (var i = 0; i < svg.childNodes.length; i++) {\n\t        if (svg.childNodes[i].nodeType === NODE_TYPE_COMMENT) {\n\t            svg.removeChild(svg.childNodes[i]);\n\t        }\n\t    }\n\n\t    //Remove CSS\n\t    while (style.childNodes.length) {\n\t        style.removeChild(style.childNodes[0]);\n\t    }\n\n\t    DOM.setAttr(svg, {\n\t        'width': width,\n\t        'height': height,\n\t        'viewBox': '0 0 ' + width + ' ' + height,\n\t        'preserveAspectRatio': 'none'\n\t    });\n\n\t    return svg;\n\t};\n\n\t/**\n\t * Converts serialized SVG to a string suitable for data URI use\n\t * @param svgString Serialized SVG string\n\t * @param [base64] Use base64 encoding for data URI\n\t */\n\texports.svgStringToDataURI = function() {\n\t    var rawPrefix = 'data:image/svg+xml;charset=UTF-8,';\n\t    var base64Prefix = 'data:image/svg+xml;charset=UTF-8;base64,';\n\n\t    return function(svgString, base64) {\n\t        if (base64) {\n\t            return base64Prefix + btoa(global.unescape(encodeURIComponent(svgString)));\n\t        } else {\n\t            return rawPrefix + encodeURIComponent(svgString);\n\t        }\n\t    };\n\t}();\n\n\t/**\n\t * Returns serialized SVG with XML processing instructions\n\t *\n\t * @param svg SVG context\n\t * @param stylesheets CSS stylesheets to include\n\t */\n\texports.serializeSVG = function(svg, engineSettings) {\n\t    if (!global.XMLSerializer) return;\n\t    var serializer = new XMLSerializer();\n\t    var svgCSS = '';\n\t    var stylesheets = engineSettings.stylesheets;\n\n\t    //External stylesheets: Processing Instruction method\n\t    if (engineSettings.svgXMLStylesheet) {\n\t        var xml = DOM.createXML();\n\t        //Add <?xml-stylesheet ?> directives\n\t        for (var i = stylesheets.length - 1; i >= 0; i--) {\n\t            var csspi = xml.createProcessingInstruction('xml-stylesheet', 'href=\"' + stylesheets[i] + '\" rel=\"stylesheet\"');\n\t            xml.insertBefore(csspi, xml.firstChild);\n\t        }\n\n\t        xml.removeChild(xml.documentElement);\n\t        svgCSS = serializer.serializeToString(xml);\n\t    }\n\n\t    var svgText = serializer.serializeToString(svg);\n\t    svgText = svgText.replace(/\\&amp;(\\#[0-9]{2,}\\;)/g, '&$1');\n\t    return svgCSS + svgText;\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Generic new DOM element function\n\t *\n\t * @param tag Tag to create\n\t * @param namespace Optional namespace value\n\t */\n\texports.newEl = function(tag, namespace) {\n\t    if (!global.document) return;\n\n\t    if (namespace == null) {\n\t        return global.document.createElement(tag);\n\t    } else {\n\t        return global.document.createElementNS(namespace, tag);\n\t    }\n\t};\n\n\t/**\n\t * Generic setAttribute function\n\t *\n\t * @param el Reference to DOM element\n\t * @param attrs Object with attribute keys and values\n\t */\n\texports.setAttr = function (el, attrs) {\n\t    for (var a in attrs) {\n\t        el.setAttribute(a, attrs[a]);\n\t    }\n\t};\n\n\t/**\n\t * Creates a XML document\n\t * @private\n\t */\n\texports.createXML = function() {\n\t    if (!global.DOMParser) return;\n\t    return new DOMParser().parseFromString('<xml />', 'application/xml');\n\t};\n\n\t/**\n\t * Converts a value into an array of DOM nodes\n\t *\n\t * @param val A string, a NodeList, a Node, or an HTMLCollection\n\t */\n\texports.getNodeArray = function(val) {\n\t    var retval = null;\n\t    if (typeof(val) == 'string') {\n\t        retval = document.querySelectorAll(val);\n\t    } else if (global.NodeList && val instanceof global.NodeList) {\n\t        retval = val;\n\t    } else if (global.Node && val instanceof global.Node) {\n\t        retval = [val];\n\t    } else if (global.HTMLCollection && val instanceof global.HTMLCollection) {\n\t        retval = val;\n\t    } else if (val instanceof Array) {\n\t        retval = val;\n\t    } else if (val === null) {\n\t        retval = [];\n\t    }\n\n\t    retval = Array.prototype.slice.call(retval);\n\n\t    return retval;\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\tvar Color = function(color, options) {\n\t    //todo: support rgba, hsla, and rrggbbaa notation\n\t    //todo: use CIELAB internally\n\t    //todo: add clamp function (with sign)\n\t    if (typeof color !== 'string') return;\n\n\t    this.original = color;\n\n\t    if (color.charAt(0) === '#') {\n\t        color = color.slice(1);\n\t    }\n\n\t    if (/[^a-f0-9]+/i.test(color)) return;\n\n\t    if (color.length === 3) {\n\t        color = color.replace(/./g, '$&$&');\n\t    }\n\n\t    if (color.length !== 6) return;\n\n\t    this.alpha = 1;\n\n\t    if (options && options.alpha) {\n\t        this.alpha = options.alpha;\n\t    }\n\n\t    this.set(parseInt(color, 16));\n\t};\n\n\t//todo: jsdocs\n\tColor.rgb2hex = function(r, g, b) {\n\t    function format (decimal) {\n\t        var hex = (decimal | 0).toString(16);\n\t        if (decimal < 16) {\n\t            hex = '0' + hex;\n\t        }\n\t        return hex;\n\t    }\n\n\t    return [r, g, b].map(format).join('');\n\t};\n\n\t//todo: jsdocs\n\tColor.hsl2rgb = function (h, s, l) {\n\t    var H = h / 60;\n\t    var C = (1 - Math.abs(2 * l - 1)) * s;\n\t    var X = C * (1 - Math.abs(parseInt(H) % 2 - 1));\n\t    var m = l - (C / 2);\n\n\t    var r = 0, g = 0, b = 0;\n\n\t    if (H >= 0 && H < 1) {\n\t        r = C;\n\t        g = X;\n\t    } else if (H >= 1 && H < 2) {\n\t        r = X;\n\t        g = C;\n\t    } else if (H >= 2 && H < 3) {\n\t        g = C;\n\t        b = X;\n\t    } else if (H >= 3 && H < 4) {\n\t        g = X;\n\t        b = C;\n\t    } else if (H >= 4 && H < 5) {\n\t        r = X;\n\t        b = C;\n\t    } else if (H >= 5 && H < 6) {\n\t        r = C;\n\t        b = X;\n\t    }\n\n\t    r += m;\n\t    g += m;\n\t    b += m;\n\n\t    r = parseInt(r * 255);\n\t    g = parseInt(g * 255);\n\t    b = parseInt(b * 255);\n\n\t    return [r, g, b];\n\t};\n\n\t/**\n\t * Sets the color from a raw RGB888 integer\n\t * @param raw RGB888 representation of color\n\t */\n\t//todo: refactor into a static method\n\t//todo: factor out individual color spaces\n\t//todo: add HSL, CIELAB, and CIELUV\n\tColor.prototype.set = function (val) {\n\t    this.raw = val;\n\n\t    var r = (this.raw & 0xFF0000) >> 16;\n\t    var g = (this.raw & 0x00FF00) >> 8;\n\t    var b = (this.raw & 0x0000FF);\n\n\t    // BT.709\n\t    var y = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n\t    var u = -0.09991 * r - 0.33609 * g + 0.436 * b;\n\t    var v = 0.615 * r - 0.55861 * g - 0.05639 * b;\n\n\t    this.rgb = {\n\t        r: r,\n\t        g: g,\n\t        b: b\n\t    };\n\n\t    this.yuv = {\n\t        y: y,\n\t        u: u,\n\t        v: v\n\t    };\n\n\t    return this;\n\t};\n\n\t/**\n\t * Lighten or darken a color\n\t * @param multiplier Amount to lighten or darken (-1 to 1)\n\t */\n\tColor.prototype.lighten = function(multiplier) {\n\t    var cm = Math.min(1, Math.max(0, Math.abs(multiplier))) * (multiplier < 0 ? -1 : 1);\n\t    var bm = (255 * cm) | 0;\n\t    var cr = Math.min(255, Math.max(0, this.rgb.r + bm));\n\t    var cg = Math.min(255, Math.max(0, this.rgb.g + bm));\n\t    var cb = Math.min(255, Math.max(0, this.rgb.b + bm));\n\t    var hex = Color.rgb2hex(cr, cg, cb);\n\t    return new Color(hex);\n\t};\n\n\t/**\n\t * Output color in hex format\n\t * @param addHash Add a hash character to the beginning of the output\n\t */\n\tColor.prototype.toHex = function(addHash) {\n\t    return (addHash ? '#' : '') + this.raw.toString(16);\n\t};\n\n\t/**\n\t * Returns whether or not current color is lighter than another color\n\t * @param color Color to compare against\n\t */\n\tColor.prototype.lighterThan = function(color) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    return this.yuv.y > color.yuv.y;\n\t};\n\n\t/**\n\t * Returns the result of mixing current color with another color\n\t * @param color Color to mix with\n\t * @param multiplier How much to mix with the other color\n\t */\n\t/*\n\tColor.prototype.mix = function (color, multiplier) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    var r = this.rgb.r;\n\t    var g = this.rgb.g;\n\t    var b = this.rgb.b;\n\t    var a = this.alpha;\n\n\t    var m = typeof multiplier !== 'undefined' ? multiplier : 0.5;\n\n\t    //todo: write a lerp function\n\t    r = r + m * (color.rgb.r - r);\n\t    g = g + m * (color.rgb.g - g);\n\t    b = b + m * (color.rgb.b - b);\n\t    a = a + m * (color.alpha - a);\n\n\t    return new Color(Color.rgbToHex(r, g, b), {\n\t        'alpha': a\n\t    });\n\t};\n\t*/\n\n\t/**\n\t * Returns the result of blending another color on top of current color with alpha\n\t * @param color Color to blend on top of current color, i.e. \"Ca\"\n\t */\n\t//todo: see if .blendAlpha can be merged into .mix\n\tColor.prototype.blendAlpha = function(color) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    var Ca = color;\n\t    var Cb = this;\n\n\t    //todo: write alpha blending function\n\t    var r = Ca.alpha * Ca.rgb.r + (1 - Ca.alpha) * Cb.rgb.r;\n\t    var g = Ca.alpha * Ca.rgb.g + (1 - Ca.alpha) * Cb.rgb.g;\n\t    var b = Ca.alpha * Ca.rgb.b + (1 - Ca.alpha) * Cb.rgb.b;\n\n\t    return new Color(Color.rgb2hex(r, g, b));\n\t};\n\n\tmodule.exports = Color;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {\n\t  'version': '2.9.0',\n\t  'svg_ns': 'http://www.w3.org/2000/svg'\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shaven = __webpack_require__(13);\n\n\tvar SVG = __webpack_require__(8);\n\tvar constants = __webpack_require__(11);\n\tvar utils = __webpack_require__(7);\n\n\tvar SVG_NS = constants.svg_ns;\n\n\tvar templates = {\n\t  'element': function (options) {\n\t    var tag = options.tag;\n\t    var content = options.content || '';\n\t    delete options.tag;\n\t    delete options.content;\n\t    return  [tag, content, options];\n\t  }\n\t};\n\n\t//todo: deprecate tag arg, infer tag from shape object\n\tfunction convertShape (shape, tag) {\n\t  return templates.element({\n\t    'tag': tag,\n\t    'width': shape.width,\n\t    'height': shape.height,\n\t    'fill': shape.properties.fill\n\t  });\n\t}\n\n\tfunction textCss (properties) {\n\t  return utils.cssProps({\n\t    'fill': properties.fill,\n\t    'font-weight': properties.font.weight,\n\t    'font-family': properties.font.family + ', monospace',\n\t    'font-size': properties.font.size + properties.font.units\n\t  });\n\t}\n\n\tfunction outlinePath (bgWidth, bgHeight, outlineWidth) {\n\t  var outlineOffsetWidth = outlineWidth / 2;\n\n\t  return [\n\t    'M', outlineOffsetWidth, outlineOffsetWidth,\n\t    'H', bgWidth - outlineOffsetWidth,\n\t    'V', bgHeight - outlineOffsetWidth,\n\t    'H', outlineOffsetWidth,\n\t    'V', 0,\n\t    'M', 0, outlineOffsetWidth,\n\t    'L', bgWidth, bgHeight - outlineOffsetWidth,\n\t    'M', 0, bgHeight - outlineOffsetWidth,\n\t    'L', bgWidth, outlineOffsetWidth\n\t  ].join(' ');\n\t}\n\n\tmodule.exports = function (sceneGraph, renderSettings) {\n\t  var engineSettings = renderSettings.engineSettings;\n\t  var stylesheets = engineSettings.stylesheets;\n\t  var stylesheetXml = stylesheets.map(function (stylesheet) {\n\t    return '<?xml-stylesheet rel=\"stylesheet\" href=\"' + stylesheet + '\"?>';\n\t  }).join('\\n');\n\n\t  var holderId = 'holder_' + Number(new Date()).toString(16);\n\n\t  var root = sceneGraph.root;\n\t  var textGroup = root.children.holderTextGroup;\n\n\t  var css = '#' + holderId + ' text { ' + textCss(textGroup.properties) + ' } ';\n\n\t  // push text down to be equally vertically aligned with canvas renderer\n\t  textGroup.y += textGroup.textPositionData.boundingBox.height * 0.8;\n\n\t  var wordTags = [];\n\n\t  Object.keys(textGroup.children).forEach(function (lineKey) {\n\t    var line = textGroup.children[lineKey];\n\n\t    Object.keys(line.children).forEach(function (wordKey) {\n\t      var word = line.children[wordKey];\n\t      var x = textGroup.x + line.x + word.x;\n\t      var y = textGroup.y + line.y + word.y;\n\n\t      var wordTag = templates.element({\n\t        'tag': 'text',\n\t        'content': word.properties.text,\n\t        'x': x,\n\t        'y': y\n\t      });\n\n\t      wordTags.push(wordTag);\n\t    });\n\t  });\n\n\t  var text = templates.element({\n\t    'tag': 'g',\n\t    'content': wordTags\n\t  });\n\n\t  var outline = null;\n\n\t  if (root.children.holderBg.properties.outline) {\n\t    var outlineProperties = root.children.holderBg.properties.outline;\n\t    outline = templates.element({\n\t      'tag': 'path',\n\t      'd': outlinePath(root.children.holderBg.width, root.children.holderBg.height, outlineProperties.width),\n\t      'stroke-width': outlineProperties.width,\n\t      'stroke': outlineProperties.fill,\n\t      'fill': 'none'\n\t    });\n\t  }\n\n\t  var bg = convertShape(root.children.holderBg, 'rect');\n\n\t  var sceneContent = [];\n\n\t  sceneContent.push(bg);\n\t  if (outlineProperties) {\n\t    sceneContent.push(outline);\n\t  }\n\t  sceneContent.push(text);\n\n\t  var scene = templates.element({\n\t    'tag': 'g',\n\t    'id': holderId,\n\t    'content': sceneContent\n\t  });\n\n\t  var style = templates.element({\n\t    'tag': 'style',\n\t    //todo: figure out how to add CDATA directive\n\t    'content': css,\n\t    'type': 'text/css'\n\t  });\n\n\t  var defs = templates.element({\n\t    'tag': 'defs',\n\t    'content': style\n\t  });\n\n\t  var svg = templates.element({\n\t    'tag': 'svg',\n\t    'content': [defs, scene],\n\t    'width': root.properties.width,\n\t    'height': root.properties.height,\n\t    'xmlns': SVG_NS,\n\t    'viewBox': [0, 0, root.properties.width, root.properties.height].join(' '),\n\t    'preserveAspectRatio': 'none'\n\t  });\n\n\t  var output = shaven(svg);\n\t  \n\t  output = stylesheetXml + output[0];\n\n\t  var svgString = SVG.svgStringToDataURI(output, renderSettings.mode === 'background');\n\t  return svgString;\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar escape = __webpack_require__(14)\n\n\t// TODO: remove namespace\n\n\tmodule.exports = function shaven (array, namespace, returnObject) {\n\n\t\t'use strict'\n\n\t\tvar i = 1,\n\t\t\tdoesEscape = true,\n\t\t\tHTMLString,\n\t\t\tattributeKey,\n\t\t\tcallback,\n\t\t\tkey\n\n\n\t\treturnObject = returnObject || {}\n\n\n\t\tfunction createElement (sugarString) {\n\n\t\t\tvar tags = sugarString.match(/^\\w+/),\n\t\t\t\telement = {\n\t\t\t\t\ttag: tags ? tags[0] : 'div',\n\t\t\t\t\tattr: {},\n\t\t\t\t\tchildren: []\n\t\t\t\t},\n\t\t\t\tid = sugarString.match(/#([\\w-]+)/),\n\t\t\t\treference = sugarString.match(/\\$([\\w-]+)/),\n\t\t\t\tclassNames = sugarString.match(/\\.[\\w-]+/g)\n\n\n\t\t\t// Assign id if is set\n\t\t\tif (id) {\n\t\t\t\telement.attr.id = id[1]\n\n\t\t\t\t// Add element to the return object\n\t\t\t\treturnObject[id[1]] = element\n\t\t\t}\n\n\t\t\tif (reference)\n\t\t\t\treturnObject[reference[1]] = element\n\n\t\t\tif (classNames)\n\t\t\t\telement.attr.class = classNames.join(' ').replace(/\\./g, '')\n\n\t\t\tif (sugarString.match(/&$/g))\n\t\t\t\tdoesEscape = false\n\n\t\t\treturn element\n\t\t}\n\n\t\tfunction replacer (key, value) {\n\n\t\t\tif (value === null || value === false || value === undefined)\n\t\t\t\treturn\n\n\t\t\tif (typeof value !== 'string' && typeof value !== 'object')\n\t\t\t\treturn String(value)\n\n\t\t\treturn value\n\t\t}\n\n\t\tfunction escapeAttribute (string) {\n\t\t\treturn String(string)\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/\"/g, '&quot;')\n\t\t}\n\n\t\tfunction escapeHTML (string) {\n\t\t\treturn String(string)\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/\"/g, '&quot;')\n\t\t\t\t.replace(/'/g, '&apos;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t}\n\n\n\t\tif (typeof array[0] === 'string')\n\t\t\tarray[0] = createElement(array[0])\n\n\t\telse if (Array.isArray(array[0]))\n\t\t\ti = 0\n\n\t\telse\n\t\t\tthrow new Error(\n\t\t\t\t'First element of array must be a string, ' +\n\t\t\t\t'or an array and not ' + JSON.stringify(array[0])\n\t\t\t)\n\n\n\t\tfor (; i < array.length; i++) {\n\n\t\t\t// Don't render element if value is false or null\n\t\t\tif (array[i] === false || array[i] === null) {\n\t\t\t\tarray[0] = false\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Continue with next array value if current value is undefined or true\n\t\t\telse if (array[i] === undefined || array[i] === true) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'string') {\n\t\t\t\tif (doesEscape)\n\t\t\t\t\tarray[i] = escapeHTML(array[i])\n\n\t\t\t\tarray[0].children.push(array[i])\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'number') {\n\n\t\t\t\tarray[0].children.push(array[i])\n\t\t\t}\n\n\t\t\telse if (Array.isArray(array[i])) {\n\n\t\t\t\tif (Array.isArray(array[i][0])) {\n\t\t\t\t\tarray[i].reverse().forEach(function (subArray) {\n\t\t\t\t\t\tarray.splice(i + 1, 0, subArray)\n\t\t\t\t\t})\n\n\t\t\t\t\tif (i !== 0)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\ti++\n\t\t\t\t}\n\n\t\t\t\tshaven(array[i], namespace, returnObject)\n\n\t\t\t\tif (array[i][0])\n\t\t\t\t\tarray[0].children.push(array[i][0])\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'function')\n\t\t\t\tcallback = array[i]\n\n\n\t\t\telse if (typeof array[i] === 'object') {\n\t\t\t\tfor (attributeKey in array[i])\n\t\t\t\t\tif (array[i].hasOwnProperty(attributeKey))\n\t\t\t\t\t\tif (array[i][attributeKey] !== null &&\n\t\t\t\t\t\t\tarray[i][attributeKey] !== false)\n\t\t\t\t\t\t\tif (attributeKey === 'style' &&\n\t\t\t\t\t\t\t\ttypeof array[i][attributeKey] === 'object')\n\t\t\t\t\t\t\t\tarray[0].attr[attributeKey] = JSON\n\t\t\t\t\t\t\t\t\t.stringify(array[i][attributeKey], replacer)\n\t\t\t\t\t\t\t\t\t.slice(2, -2)\n\t\t\t\t\t\t\t\t\t.replace(/\",\"/g, ';')\n\t\t\t\t\t\t\t\t\t.replace(/\":\"/g, ':')\n\t\t\t\t\t\t\t\t\t.replace(/\\\\\"/g, '\\'')\n\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tarray[0].attr[attributeKey] = array[i][attributeKey]\n\t\t\t}\n\n\t\t\telse\n\t\t\t\tthrow new TypeError('\"' + array[i] + '\" is not allowed as a value.')\n\t\t}\n\n\n\t\tif (array[0] !== false) {\n\n\t\t\tHTMLString = '<' + array[0].tag\n\n\t\t\tfor (key in array[0].attr)\n\t\t\t\tif (array[0].attr.hasOwnProperty(key))\n\t\t\t\t\tHTMLString += ' ' + key + '=\"' +\n\t\t\t\t\t\tescapeAttribute(array[0].attr[key] || '') + '\"'\n\n\t\t\tHTMLString += '>'\n\n\t\t\tarray[0].children.forEach(function (child) {\n\t\t\t\tHTMLString += child\n\t\t\t})\n\n\t\t\tHTMLString += '</' + array[0].tag + '>'\n\n\t\t\tarray[0] = HTMLString\n\t\t}\n\n\t\t// Return root element on index 0\n\t\treturnObject[0] = array[0]\n\n\t\tif (callback)\n\t\t\tcallback(array[0])\n\n\t\t// returns object containing all elements with an id and the root element\n\t\treturn returnObject\n\t}\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * escape-html\n\t * Copyright(c) 2012-2013 TJ Holowaychuk\n\t * MIT Licensed\n\t */\n\n\t/**\n\t * Module exports.\n\t * @public\n\t */\n\n\tmodule.exports = escapeHtml;\n\n\t/**\n\t * Escape special characters in the given string of html.\n\t *\n\t * @param  {string} str The string to escape for inserting into HTML\n\t * @return {string}\n\t * @public\n\t */\n\n\tfunction escapeHtml(html) {\n\t  return String(html)\n\t    .replace(/&/g, '&amp;')\n\t    .replace(/\"/g, '&quot;')\n\t    .replace(/'/g, '&#39;')\n\t    .replace(/</g, '&lt;')\n\t    .replace(/>/g, '&gt;');\n\t}\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar DOM = __webpack_require__(9);\n\tvar utils = __webpack_require__(7);\n\n\tmodule.exports = (function() {\n\t    var canvas = DOM.newEl('canvas');\n\t    var ctx = null;\n\n\t    return function(sceneGraph) {\n\t        if (ctx == null) {\n\t            ctx = canvas.getContext('2d');\n\t        }\n\n\t        var dpr = utils.canvasRatio();\n\t        var root = sceneGraph.root;\n\t        canvas.width = dpr * root.properties.width;\n\t        canvas.height = dpr * root.properties.height ;\n\t        ctx.textBaseline = 'middle';\n\n\t        var bg = root.children.holderBg;\n\t        var bgWidth = dpr * bg.width;\n\t        var bgHeight = dpr * bg.height;\n\t        //todo: parametrize outline width (e.g. in scene object)\n\t        var outlineWidth = 2;\n\t        var outlineOffsetWidth = outlineWidth / 2;\n\n\t        ctx.fillStyle = bg.properties.fill;\n\t        ctx.fillRect(0, 0, bgWidth, bgHeight);\n\n\t        if (bg.properties.outline) {\n\t            //todo: abstract this into a method\n\t            ctx.strokeStyle = bg.properties.outline.fill;\n\t            ctx.lineWidth = bg.properties.outline.width;\n\t            ctx.moveTo(outlineOffsetWidth, outlineOffsetWidth);\n\t            // TL, TR, BR, BL\n\t            ctx.lineTo(bgWidth - outlineOffsetWidth, outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth - outlineOffsetWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(outlineOffsetWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(outlineOffsetWidth, outlineOffsetWidth);\n\t            // Diagonals\n\t            ctx.moveTo(0, outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.moveTo(0, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth, outlineOffsetWidth);\n\t            ctx.stroke();\n\t        }\n\n\t        var textGroup = root.children.holderTextGroup;\n\t        ctx.font = textGroup.properties.font.weight + ' ' + (dpr * textGroup.properties.font.size) + textGroup.properties.font.units + ' ' + textGroup.properties.font.family + ', monospace';\n\t        ctx.fillStyle = textGroup.properties.fill;\n\n\t        for (var lineKey in textGroup.children) {\n\t            var line = textGroup.children[lineKey];\n\t            for (var wordKey in line.children) {\n\t                var word = line.children[wordKey];\n\t                var x = dpr * (textGroup.x + line.x + word.x);\n\t                var y = dpr * (textGroup.y + line.y + word.y + (textGroup.properties.leading / 2));\n\n\t                ctx.fillText(word.properties.text, x, y);\n\t            }\n\t        }\n\n\t        return canvas.toDataURL('image/png');\n\t    };\n\t})();\n\n/***/ }\n/******/ ])\n});\n;\n(function(ctx, isMeteorPackage) {\n    if (isMeteorPackage) {\n        Holder = ctx.Holder;\n    }\n})(this, typeof Meteor !== 'undefined' && typeof Package !== 'undefined');\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/information.js",
    "content": "$(document).ready(function(){\n    var oldPswflag=0;\n    var newPswflag=0;\n    $(\"#name\").text($(\"#nameVal\").text());\n    $(\"#email\").val($(\"#emailVal\").text());\n    $(\"#telephone\").val($(\"#telephoneVal\").text());\n    $(\"#changeInfo\").click(function(){\n        $(\"#update-info\").modal({\n            backdrop:'static'\n        });\n    });\n\n\n    $(\"#saveInfo\").click(function (){\n        var saveInfo={};\n        saveInfo.name=$(\"#name\").val();\n        saveInfo.email=$(\"#email\").val();\n        saveInfo.telephone=$(\"#telephone\").val();\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/saveInfo\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:saveInfo,\n            dateType:\"json\",\n            success: function(result){\n                if (result.msg==\"更新失败\")\n                {\n                    swal(result.msg);\n                }\n                else {\n                    $(\"#update-info\").modal('hide');\n                    swal(\"修改成功\", \"\", \"success\");\n                    $(\"button\").click(function (){\n                        location.reload();\n                    });\n                }\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    });\n\n    $(\"#changePsw\").click(function (){\n        $(\"#update-Psw\").modal({\n            backdrop:'static'\n        });\n    });\n\n    $(\"#oldPsw\").blur(function (){\n        if ($(\"#oldPsw\").val()!=$(\"#Psw\").attr(\"Psw\"))\n        {\n            $(\"#oldPswError\").show();\n        }\n        else\n        {\n            $(\"#oldPswError\").hide();\n            oldPswflag=1;\n        }\n    })\n\n   /* $(\"#newPsw\").focus(function (){\n        if ($(\"#oldPsw\").val()==$(\"#Psw\").attr(\"Psw\"))\n        {\n            $(\"#oldPswError\").hide();\n            oldPswflag=1;\n        }\n    });*/\n\n    $(\"#newPsw\").blur(function (){\n        if($(\"#newPsw\").val().length<8)\n        {\n            $(\"#newPswError\").show();\n        }\n        else {\n            $(\"#newPswError\").hide();\n            newPswflag=1;\n        }\n    });\n\n    $(\"#savePsw\").click(function (){\n        if (oldPswflag==1&&newPswflag==1)\n        {\n            var Psw={};\n            Psw.Psw=$(\"#newPsw\").val();\n            $.ajax({\n                type: \"POST\",\n                url: \"/shop/savePsw\",\n                contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n                data:Psw,\n                dateType:\"json\",\n                success: function(result){\n                    if (result.msg==\"更新失败\")\n                    {\n                        swal(result.msg);\n                    }\n                    else {\n                        $(\"#update-info\").modal('hide');\n                        swal(result.msg);\n                        $(\"button\").click(function (){\n                            location.reload();\n                        });\n                    }\n                },\n                error:function (){\n                    alert(\"更新失败\");\n                }\n            });\n        }\n    })\n\n});\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.2.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( \">tbody\", elem )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with computed style\n\tvar valueIsBorderBox,\n\t\tstyles = getStyles( elem ),\n\t\tval = curCSS( elem, name, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test( val ) ) {\n\t\treturn val;\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = isBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t// Fall back to offsetWidth/Height when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\tif ( val === \"auto\" ) {\n\t\tval = elem[ \"offset\" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar doc, docElem, rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\tdoc = elem.ownerDocument;\n\t\tdocElem = doc.documentElement;\n\t\twin = doc.defaultView;\n\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/jquery.raty.js",
    "content": "/*!\n * jQuery Raty - A Star Rating Plugin\n * ------------------------------------------------------------------\n *\n * jQuery Raty is a plugin that generates a customizable star rating.\n *\n * Licensed under The MIT License\n *\n * @version        2.5.2\n * @since          2010.06.11\n * @author         Washington Botelho\n * @documentation  wbotelhos.com/raty\n *\n * ------------------------------------------------------------------\n *\n *  <div id=\"star\"></div>\n *\n *  $('#star').raty();\n *\n */\n\n;(function($) {\n\n  var methods = {\n    init: function(settings) {\n      return this.each(function() {\n        methods.destroy.call(this);\n\n        this.opt = $.extend(true, {}, $.fn.raty.defaults, settings);\n\n        var that  = $(this),\n            inits = ['number', 'readOnly', 'score', 'scoreName'];\n\n        methods._callback.call(this, inits);\n\n        if (this.opt.precision) {\n          methods._adjustPrecision.call(this);\n        }\n\n        this.opt.number = methods._between(this.opt.number, 0, this.opt.numberMax)\n\n        this.opt.path = this.opt.path || '';\n\n        if (this.opt.path && this.opt.path.slice(this.opt.path.length - 1, this.opt.path.length) !== '/') {\n          this.opt.path += '/';\n        }\n\n        this.stars = methods._createStars.call(this);\n        this.score = methods._createScore.call(this);\n\n        methods._apply.call(this, this.opt.score);\n\n        var space  = this.opt.space ? 4 : 0,\n            width  = this.opt.width || (this.opt.number * this.opt.size + this.opt.number * space);\n\n        if (this.opt.cancel) {\n          this.cancel = methods._createCancel.call(this);\n\n          width += (this.opt.size + space);\n        }\n\n        if (this.opt.readOnly) {\n          methods._lock.call(this);\n        } else {\n          that.css('cursor', 'pointer');\n          methods._binds.call(this);\n        }\n\n        if (this.opt.width !== false) {\n          that.css('width', width);\n        }\n\n        methods._target.call(this, this.opt.score);\n\n        that.data({ 'settings': this.opt, 'raty': true });\n      });\n    }, _adjustPrecision: function() {\n      this.opt.targetType = 'score';\n      this.opt.half       = true;\n    }, _apply: function(score) {\n      if (score && score > 0) {\n        score = methods._between(score, 0, this.opt.number);\n        this.score.val(score);\n      }\n\n      methods._fill.call(this, score);\n\n      if (score) {\n        methods._roundStars.call(this, score);\n      }\n    }, _between: function(value, min, max) {\n      return Math.min(Math.max(parseFloat(value), min), max);\n    }, _binds: function() {\n      if (this.cancel) {\n        methods._bindCancel.call(this);\n      }\n\n      methods._bindClick.call(this);\n      methods._bindOut.call(this);\n      methods._bindOver.call(this);\n    }, _bindCancel: function() {\n      methods._bindClickCancel.call(this);\n      methods._bindOutCancel.call(this);\n      methods._bindOverCancel.call(this);\n    }, _bindClick: function() {\n      var self = this,\n          that = $(self);\n\n      self.stars.on('click.raty', function(evt) {\n        self.score.val((self.opt.half || self.opt.precision) ? that.data('score') : this.alt);\n\n        if (self.opt.click) {\n          self.opt.click.call(self, parseFloat(self.score.val()), evt);\n        }\n      });\n    }, _bindClickCancel: function() {\n      var self = this;\n\n      self.cancel.on('click.raty', function(evt) {\n        self.score.removeAttr('value');\n\n        if (self.opt.click) {\n          self.opt.click.call(self, null, evt);\n        }\n      });\n    }, _bindOut: function() {\n      var self = this;\n\n      $(this).on('mouseleave.raty', function(evt) {\n        var score = parseFloat(self.score.val()) || undefined;\n\n        methods._apply.call(self, score);\n        methods._target.call(self, score, evt);\n\n        if (self.opt.mouseout) {\n          self.opt.mouseout.call(self, score, evt);\n        }\n      });\n    }, _bindOutCancel: function() {\n      var self = this;\n\n      self.cancel.on('mouseleave.raty', function(evt) {\n        $(this).attr('src', self.opt.path + self.opt.cancelOff);\n\n        if (self.opt.mouseout) {\n          self.opt.mouseout.call(self, self.score.val() || null, evt);\n        }\n      });\n    }, _bindOverCancel: function() {\n      var self = this;\n\n      self.cancel.on('mouseover.raty', function(evt) {\n        $(this).attr('src', self.opt.path + self.opt.cancelOn);\n\n        self.stars.attr('src', self.opt.path + self.opt.starOff);\n\n        methods._target.call(self, null, evt);\n\n        if (self.opt.mouseover) {\n          self.opt.mouseover.call(self, null);\n        }\n      });\n    }, _bindOver: function() {\n      var self   = this,\n          that   = $(self),\n          action = self.opt.half ? 'mousemove.raty' : 'mouseover.raty';\n\n      self.stars.on(action, function(evt) {\n        var score = parseInt(this.alt, 10);\n\n        if (self.opt.half) {\n          var position = parseFloat((evt.pageX - $(this).offset().left) / self.opt.size),\n              plus     = (position > .5) ? 1 : .5;\n\n          score = score - 1 + plus;\n\n          methods._fill.call(self, score);\n\n          if (self.opt.precision) {\n            score = score - plus + position;\n          }\n\n          methods._roundStars.call(self, score);\n\n          that.data('score', score);\n        } else {\n          methods._fill.call(self, score);\n        }\n\n        methods._target.call(self, score, evt);\n\n        if (self.opt.mouseover) {\n          self.opt.mouseover.call(self, score, evt);\n        }\n      });\n    }, _callback: function(options) {\n      for (i in options) {\n        if (typeof this.opt[options[i]] === 'function') {\n          this.opt[options[i]] = this.opt[options[i]].call(this);\n        }\n      }\n    }, _createCancel: function() {\n      var that   = $(this),\n          icon   = this.opt.path + this.opt.cancelOff,\n          cancel = $('<img />', { src: icon, alt: 'x', title: this.opt.cancelHint, 'class': 'raty-cancel' });\n\n      if (this.opt.cancelPlace == 'left') {\n        that.prepend('&#160;').prepend(cancel);\n      } else {\n        that.append('&#160;').append(cancel);\n      }\n\n      return cancel;\n    }, _createScore: function() {\n      return $('<input />', { type: 'hidden', name: this.opt.scoreName }).appendTo(this);\n    }, _createStars: function() {\n      var that = $(this);\n\n      for (var i = 1; i <= this.opt.number; i++) {\n        var title = methods._getHint.call(this, i),\n            icon  = (this.opt.score && this.opt.score >= i) ? 'starOn' : 'starOff';\n\n        icon = this.opt.path + this.opt[icon];\n\n        $('<img />', { src : icon, alt: i, title: title }).appendTo(this);\n\n        if (this.opt.space) {\n          that.append((i < this.opt.number) ? '&#160;' : '');\n        }\n      }\n\n      return that.children('img');\n    }, _error: function(message) {\n      $(this).html(message);\n\n      $.error(message);\n    }, _fill: function(score) {\n      var self  = this,\n          hash  = 0;\n\n      for (var i = 1; i <= self.stars.length; i++) {\n        var star   = self.stars.eq(i - 1),\n            select = self.opt.single ? (i == score) : (i <= score);\n\n        if (self.opt.iconRange && self.opt.iconRange.length > hash) {\n          var irange = self.opt.iconRange[hash],\n              on     = irange.on  || self.opt.starOn,\n              off    = irange.off || self.opt.starOff,\n              icon   = select ? on : off;\n\n          if (i <= irange.range) {\n            star.attr('src', self.opt.path + icon);\n          }\n\n          if (i == irange.range) {\n            hash++;\n          }\n        } else {\n          var icon = select ? 'starOn' : 'starOff';\n\n          star.attr('src', this.opt.path + this.opt[icon]);\n        }\n      }\n    }, _getHint: function(score) {\n      var hint = this.opt.hints[score - 1];\n      return (hint === '') ? '' : (hint || score);\n    }, _lock: function() {\n      var score = parseInt(this.score.val(), 10), // TODO: 3.1 >> [['1'], ['2'], ['3', '.1', '.2']]\n          hint  = score ? methods._getHint.call(this, score) : this.opt.noRatedMsg;\n\n      $(this).data('readonly', true).css('cursor', '').attr('title', hint);\n\n      this.score.attr('readonly', 'readonly');\n      this.stars.attr('title', hint);\n\n      if (this.cancel) {\n        this.cancel.hide();\n      }\n    }, _roundStars: function(score) {\n      var rest = (score - Math.floor(score)).toFixed(2);\n\n      if (rest > this.opt.round.down) {\n        var icon = 'starOn';                                 // Up:   [x.76 .. x.99]\n\n        if (this.opt.halfShow && rest < this.opt.round.up) { // Half: [x.26 .. x.75]\n          icon = 'starHalf';\n        } else if (rest < this.opt.round.full) {             // Down: [x.00 .. x.5]\n          icon = 'starOff';\n        }\n\n        this.stars.eq(Math.ceil(score) - 1).attr('src', this.opt.path + this.opt[icon]);\n      }                              // Full down: [x.00 .. x.25]\n    }, _target: function(score, evt) {\n      if (this.opt.target) {\n        var target = $(this.opt.target);\n\n        if (target.length === 0) {\n          methods._error.call(this, 'Target selector invalid or missing!');\n        }\n\n        if (this.opt.targetFormat.indexOf('{score}') < 0) {\n          methods._error.call(this, 'Template \"{score}\" missing!');\n        }\n\n        var mouseover = evt && evt.type == 'mouseover';\n\n        if (score === undefined) {\n          score = this.opt.targetText;\n        } else if (score === null) {\n          score = mouseover ? this.opt.cancelHint : this.opt.targetText;\n        } else {\n          if (this.opt.targetType == 'hint') {\n            score = methods._getHint.call(this, Math.ceil(score));\n          } else if (this.opt.precision) {\n            score = parseFloat(score).toFixed(1);\n          }\n\n          if (!mouseover && !this.opt.targetKeep) {\n            score = this.opt.targetText;\n          }\n        }\n\n        if (score) {\n          score = this.opt.targetFormat.toString().replace('{score}', score);\n        }\n\n        if (target.is(':input')) {\n          target.val(score);\n        } else {\n          target.html(score);\n        }\n      }\n    }, _unlock: function() {\n      $(this).data('readonly', false).css('cursor', 'pointer').removeAttr('title');\n\n      this.score.removeAttr('readonly', 'readonly');\n\n      for (var i = 0; i < this.opt.number; i++) {\n        this.stars.eq(i).attr('title', methods._getHint.call(this, i + 1));\n      }\n\n      if (this.cancel) {\n        this.cancel.css('display', '');\n      }\n    }, cancel: function(click) {\n      return this.each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods[click ? 'click' : 'score'].call(this, null);\n          this.score.removeAttr('value');\n        }\n      });\n    }, click: function(score) {\n      return $(this).each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods._apply.call(this, score);\n\n          if (!this.opt.click) {\n            methods._error.call(this, 'You must add the \"click: function(score, evt) { }\" callback.');\n          }\n\n          this.opt.click.call(this, score, { type: 'click' });\n\n          methods._target.call(this, score);\n        }\n      });\n    }, destroy: function() {\n      return $(this).each(function() {\n        var that = $(this),\n            raw  = that.data('raw');\n\n        if (raw) {\n          that.off('.raty').empty().css({ cursor: raw.style.cursor, width: raw.style.width }).removeData('readonly');\n        } else {\n          that.data('raw', that.clone()[0]);\n        }\n      });\n    }, getScore: function() {\n      var score = [],\n          value ;\n\n      $(this).each(function() {\n        value = this.score.val();\n\n        score.push(value ? parseFloat(value) : undefined);\n      });\n\n      return (score.length > 1) ? score : score[0];\n    }, readOnly: function(readonly) {\n      return this.each(function() {\n        var that = $(this);\n\n        if (that.data('readonly') !== readonly) {\n          if (readonly) {\n            that.off('.raty').children('img').off('.raty');\n\n            methods._lock.call(this);\n          } else {\n            methods._binds.call(this);\n            methods._unlock.call(this);\n          }\n\n          that.data('readonly', readonly);\n        }\n      });\n    }, reload: function() {\n      return methods.set.call(this, {});\n    }, score: function() {\n      return arguments.length ? methods.setScore.apply(this, arguments) : methods.getScore.call(this);\n    }, set: function(settings) {\n      return this.each(function() {\n        var that   = $(this),\n            actual = that.data('settings'),\n            news   = $.extend({}, actual, settings);\n\n        that.raty(news);\n      });\n    }, setScore: function(score) {\n      return $(this).each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods._apply.call(this, score);\n          methods._target.call(this, score);\n        }\n      });\n    }\n  };\n\n  $.fn.raty = function(method) {\n    if (methods[method]) {\n      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if (typeof method === 'object' || !method) {\n      return methods.init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist!');\n    }\n  };\n\n  $.fn.raty.defaults = {\n    cancel        : false,\n    cancelHint    : 'Cancel this rating!',\n    cancelOff     : 'cancel-off.png',\n    cancelOn      : 'cancel-on.png',\n    cancelPlace   : 'left',\n    click         : undefined,\n    half          : false,\n    halfShow      : true,\n    hints         : ['bad', 'poor', 'regular', 'good', 'gorgeous'],\n    iconRange     : undefined,\n    mouseout      : undefined,\n    mouseover     : undefined,\n    noRatedMsg    : 'Not rated yet!',\n    number        : 5,\n    numberMax     : 20,\n    path          : '',\n    precision     : false,\n    readOnly      : false,\n    round         : { down: .25, full: .6, up: .76 },\n    score         : undefined,\n    scoreName     : 'score',\n    single        : false,\n    size          : 16,\n    space         : true,\n    starHalf      : 'star-half.png',\n    starOff       : 'star-off.png',\n    starOn        : 'star-on.png',\n    target        : undefined,\n    targetFormat  : '{score}',\n    targetKeep    : false,\n    targetText    : '',\n    targetType    : 'hint',\n    width         : undefined\n  };\n\n})(jQuery);\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/list.js",
    "content": "$(document).ready(function (){\n   $(\"[name='deleteList']\").click(function (){\n       var orderid=$(this).parents(\"[name='parent']\").find(\"[name='orderid']\").text();\n       var order={};\n       order.orderid= parseInt(orderid);\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/deleteList\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:order,\n           dataType:\"json\",\n           success:function (result){\n               swal(result.msg);\n               $(\"button\").click(function (){\n                   location.reload();\n               });\n           },\n           error:function (){\n               alert(\"删除失败\");\n           }\n       });\n   });\n\n    $(\"[name='finishList']\").click(function (){\n        var orderid=$(this).parents(\"[name='parent']\").find(\"[name='orderid']\").text();\n        var order={};\n        order.orderid=orderid;\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/finishList\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:order,\n            dataType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"点击失败\");\n            }\n        });\n    })\n\n    var goodsId={};\n\n    $(\"[name='evaluate']\").click(function (){\n        $(\"#evaluate\").modal({\n            backdrop:'static'\n        });\n        goodsId=$(this).parents(\".table-bordered\").find(\".col-lg-1\").eq(0).text();\n\n    })\n\n    $(\"#star\").raty({path: '../image/img'});\n\n    $(\"#saveEvaluate\").click(function (){\n        var score=$(\"[name='score']\").val();\n        var content=$(\"#description\").val();\n        var comment={};\n        comment.commentid={};\n        comment.userid={};\n        comment.goodsid=goodsId;\n        comment.point=score;\n        comment.content=content;\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/comment\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:comment,\n            dataType:\"json\",\n            success:function (result){\n                $(\"#evaluate\").modal('hide');\n                swal(result.msg);\n            },\n            error:function (){\n                alert(\"评论失败\");\n            }\n        });\n\n\n    })\n\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/login.js",
    "content": "\n$.validator.setDefaults({\n\tsubmitHandler: function() {\n\t\tform.submit();\n\t}\n});\n$(document).ready(function() {\n\t$('#form2').validate({\n\t\trules: {\n\t\t\tusername: \"required\",\n\t\t\t\n\t\t\tpassword: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\tconfirmlogo: \"required\",\n\t\t},\n\t\tmessages: {\n\t\t\tusername: \"用户名输入不能为空\",\n\t\t\t\n\t\t\tpassword: {\n\t\t\t\trequired: \"密码输入不能为空\",\n\t\t\t},\n\t\t\tconfirmlogo: \"验证码输入不能为空\",\n\t\t}\n\t});\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/mqttws31.js",
    "content": "/*******************************************************************************\n * Copyright (c) 2013 IBM Corp.\n *\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * and Eclipse Distribution License v1.0 which accompany this distribution. \n *\n * The Eclipse Public License is available at \n *    http://www.eclipse.org/legal/epl-v10.html\n * and the Eclipse Distribution License is available at \n *   http://www.eclipse.org/org/documents/edl-v10.php.\n *\n * Contributors:\n *    Andrew Banks - initial API and implementation and initial documentation\n *******************************************************************************/\n\n\n// Only expose a single object name in the global namespace.\n// Everything must go through this module. Global Messaging module\n// only has a single public function, client, which returns\n// a Messaging client object given connection details.\n \n/**\n * @namespace Messaging \n * Send and receive messages using web browsers.\n * <p> \n * This programming interface lets a JavaScript client application use the MQTT V3.1 protocol to \n * connect to an MQTT-supporting messaging server.\n *  \n * The function supported includes:\n * <ol>\n * <li>Connecting to and disconnecting from a server. The server is identified by its host name and port number. \n * <li>Specifying options that relate to the communications link with the server, \n * for example the frequency of keep-alive heartbeats, and whether SSL/TLS is required.\n * <li>Subscribing to and receiving messages from MQTT Topics.\n * <li>Publishing messages to MQTT Topics.\n * </ol>\n * <p>\n * <h2>The API consists of two main objects:</h2>\n * The <b>Messaging.Client</b> object. This contains methods that provide the functionality of the API,\n * including provision of callbacks that notify the application when a message arrives from or is delivered to the messaging server,\n * or when the status of its connection to the messaging server changes.\n * <p>\n * The <b>Messaging.Message</b> object. This encapsulates the payload of the message along with various attributes\n * associated with its delivery, in particular the destination to which it has been (or is about to be) sent. \n * <p>\n * The programming interface validates parameters passed to it, and will throw an Error containing an error message\n * intended for developer use, if it detects an error with any parameter.\n * <p>\n * Example:\n * \n * <code><pre>\nclient = new Messaging.Client(location.hostname, Number(location.port), \"clientId\");\nclient.onConnectionLost = onConnectionLost;\nclient.onMessageArrived = onMessageArrived;\nclient.connect({onSuccess:onConnect});\n\nfunction onConnect() {\n  // Once a connection has been made, make a subscription and send a message.\n  console.log(\"onConnect\");\n  client.subscribe(\"/World\");\n  message = new Messaging.Message(\"Hello\");\n  message.destinationName = \"/World\";\n  client.send(message); \n};\nfunction onConnectionLost(responseObject) {\n  if (responseObject.errorCode !== 0)\n    console.log(\"onConnectionLost:\"+responseObject.errorMessage);\n};\nfunction onMessageArrived(message) {\n  console.log(\"onMessageArrived:\"+message.payloadString);\n  client.disconnect(); \n};\t\n * </pre></code>\n * <p>\n * Other programming languages,\n * <a href=\"/clients/java/doc/javadoc/index.html\"><big>Java</big></a>,\n * <a href=\"/clients/c/doc/html/index.html\"><big>C</big></a>.\n */\nMessaging = (function (global) {\n\n    // Private variables below, these are only visible inside the function closure\n    // which is used to define the module. \n\n\tvar version = \"0.0.0.0\";\n\tvar buildLevel = \"@BUILDLEVEL@\";\n\t\n    /** \n     * Unique message type identifiers, with associated\n     * associated integer values.\n     * @private \n     */\n    var MESSAGE_TYPE = {\n        CONNECT: 1, \n        CONNACK: 2, \n        PUBLISH: 3,\n        PUBACK: 4,\n        PUBREC: 5, \n        PUBREL: 6,\n        PUBCOMP: 7,\n        SUBSCRIBE: 8,\n        SUBACK: 9,\n        UNSUBSCRIBE: 10,\n        UNSUBACK: 11,\n        PINGREQ: 12,\n        PINGRESP: 13,\n        DISCONNECT: 14\n    };\n    \n    // Collection of utility methods used to simplify module code \n    // and promote the DRY pattern.  \n\n    /**\n     * Validate an object's parameter names to ensure they \n     * match a list of expected variables name for this option\n     * type. Used to ensure option object passed into the API don't\n     * contain erroneous parameters.\n     * @param {Object} obj User options object\n     * @param {key:type, key2:type, ...} valid keys and types that may exist in obj. \n     * @throws {Error} Invalid option parameter found. \n     * @private \n     */\n    var validate = function(obj, keys) {\n        for(key in obj) {\n        \tif (obj.hasOwnProperty(key)) {       \t\t\n        \t    if (keys.hasOwnProperty(key)) {\n        \t        if (typeof obj[key] !== keys[key])\n        \t\t       throw new Error(format(ERROR.INVALID_TYPE, [typeof obj[key], key]));\n        \t    } else {\t\n            \t    var errorStr = \"Unknown property, \" + key + \". Valid properties are:\";\n            \t    for (key in keys)\n            \t\t    if (keys.hasOwnProperty(key))\n            \t\t        errorStr = errorStr+\" \"+key;\n            \t    throw new Error(errorStr);\n                }\n        \t}\n        }\n    };\n\n    /**\n     * Return a new function which runs the user function bound\n     * to a fixed scope. \n     * @param {function} User function\n     * @param {object} Function scope  \n     * @return {function} User function bound to another scope\n     * @private \n     */\n    var scope = function (f, scope) {\n        return function () {\n            return f.apply(scope, arguments);\n        };\n    };\n    \n    /** \n     * Unique message type identifiers, with associated\n     * associated integer values.\n     * @private \n     */\n    var ERROR = {\n    \tOK: {code:0, text:\"AMQJSC0000I OK.\"},\n    \tCONNECT_TIMEOUT: {code:1, text:\"AMQJSC0001E Connect timed out.\"},\n        SUBSCRIBE_TIMEOUT: {code:2, text:\"AMQJS0002E Subscribe timed out.\"}, \n        UNSUBSCRIBE_TIMEOUT: {code:3, text:\"AMQJS0003E Unsubscribe timed out.\"},\n        PING_TIMEOUT: {code:4, text:\"AMQJS0004E Ping timed out.\"},\n        INTERNAL_ERROR: {code:5, text:\"AMQJS0005E Internal error.\"},\n        CONNACK_RETURNCODE: {code:6, text:\"AMQJS0006E Bad Connack return code:{0} {1}.\"},\n        SOCKET_ERROR: {code:7, text:\"AMQJS0007E Socket error:{0}.\"},\n        SOCKET_CLOSE: {code:8, text:\"AMQJS0008I Socket closed.\"},\n        MALFORMED_UTF: {code:9, text:\"AMQJS0009E Malformed UTF data:{0} {1} {2}.\"},\n        UNSUPPORTED: {code:10, text:\"AMQJS0010E {0} is not supported by this browser.\"},\n        INVALID_STATE: {code:11, text:\"AMQJS0011E Invalid state {0}.\"},\n        INVALID_TYPE: {code:12, text:\"AMQJS0012E Invalid type {0} for {1}.\"},\n        INVALID_ARGUMENT: {code:13, text:\"AMQJS0013E Invalid argument {0} for {1}.\"},\n        UNSUPPORTED_OPERATION: {code:14, text:\"AMQJS0014E Unsupported operation.\"},\n        INVALID_STORED_DATA: {code:15, text:\"AMQJS0015E Invalid data in local storage key={0} value={1}.\"},\n        INVALID_MQTT_MESSAGE_TYPE: {code:16, text:\"AMQJS0016E Invalid MQTT message type {0}.\"},\n        MALFORMED_UNICODE: {code:17, text:\"AMQJS0017E Malformed Unicode string:{0} {1}.\"},\n    };\n    \n    /** CONNACK RC Meaning. */\n    var CONNACK_RC = {\n   \t\t0:\"Connection Accepted\",\n   \t\t1:\"Connection Refused: unacceptable protocol version\",\n   \t\t2:\"Connection Refused: identifier rejected\",\n   \t\t3:\"Connection Refused: server unavailable\",\n   \t\t4:\"Connection Refused: bad user name or password\",\n   \t\t5:\"Connection Refused: not authorized\"\n    };\n \n    /**\n     * Format an error message text.\n     * @private\n     * @param {error} ERROR.KEY value above.\n     * @param {substitutions} [array] substituted into the text.\n     * @return the text with the substitutions made.\n     */\n    var format = function(error, substitutions) {\n    \tvar text = error.text;\n    \tif (substitutions) {\n    \t  for (var i=0; i<substitutions.length; i++) {\n    \t\tfield = \"{\"+i+\"}\";\n    \t\tstart = text.indexOf(field);\n    \t\tif(start > 0) {\n    \t\t\tvar part1 = text.substring(0,start);\n    \t\t\tvar part2 = text.substring(start+field.length);\n    \t\t\ttext = part1+substitutions[i]+part2;\n    \t\t}\n    \t  }\n    \t}\n    \treturn text;\n    };\n    \n    //MQTT protocol and version        6    M    Q    I    s    d    p    3\n    var MqttProtoIdentifier = [0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03];\n    \n    /**\n     * @ignore\n     * Construct an MQTT wire protocol message.\n     * @param type MQTT packet type.\n     * @param options optional wire message attributes.\n     * \n     * Optional properties\n     * \n     * messageIdentifier: message ID in the range [0..65535]\n     * payloadMessage:\tApplication Message - PUBLISH only\n     * connectStrings:\tarray of 0 or more Strings to be put into the CONNECT payload\n     * topics:\t\t\tarray of strings (SUBSCRIBE, UNSUBSCRIBE)\n     * requestQoS:\t\tarray of QoS values [0..2]\n     *  \n     * \"Flag\" properties \n     * cleanSession:\ttrue if present / false if absent (CONNECT)\n     * willMessage:  \ttrue if present / false if absent (CONNECT)\n     * isRetained:\t\ttrue if present / false if absent (CONNECT)\n     * userName:\t\ttrue if present / false if absent (CONNECT)\n     * password:\t\ttrue if present / false if absent (CONNECT)\n     * keepAliveInterval:\tinteger [0..65535]  (CONNECT)\n     *\n     * @private\n     */\n    var WireMessage = function (type, options) { \t\n        this.type = type;\n        for(name in options) {\n            if (options.hasOwnProperty(name)) {\n                this[name] = options[name];\n            }\n        }\n    };\n    \n    WireMessage.prototype.encode = function() {\n    \t// Compute the first byte of the fixed header\n    \tvar first = ((this.type & 0x0f) << 4);\n    \t\n    \t/*\n    \t * Now calculate the length of the variable header + payload by adding up the lengths\n    \t * of all the component parts\n    \t */\n\n    \tremLength = 0;\n    \ttopicStrLength = new Array();\n    \t\n    \t// if the message contains a messageIdentifier then we need two bytes for that\n    \tif (this.messageIdentifier != undefined)\n    \t\tremLength += 2;\n\n    \tswitch(this.type) {\n    \t    // If this a Connect then we need to include 12 bytes for its header\n\t        case MESSAGE_TYPE.CONNECT:\n\t        \tremLength += MqttProtoIdentifier.length + 3;\n                remLength += UTF8Length(this.clientId) + 2;\n\t\t\t    if (this.willMessage != undefined) {\n\t\t\t    \tremLength += UTF8Length(this.willMessage.destinationName) + 2;\n                    // Will message is always a string, sent as UTF-8 characters with a preceding length.\n\t\t\t\t    var willMessagePayloadBytes = this.willMessage.payloadBytes;\n\t\t\t\t    if (!(willMessagePayloadBytes instanceof Uint8Array))\n\t\t        \t\twillMessagePayloadBytes = new Uint8Array(payloadBytes);\n                    remLength += willMessagePayloadBytes.byteLength +2;\n    \t        }\n                if (this.userName != undefined)\n                    remLength += UTF8Length(this.userName) + 2;\n                if (this.password != undefined)\n                    remLength += UTF8Length(this.password) + 2;\n\t\t\tbreak;\n\n\t\t\t// Subscribe, Unsubscribe can both contain topic strings\n\t        case MESSAGE_TYPE.SUBSCRIBE:\t        \t\n\t        \tfirst |= 0x02; // Qos = 1;\n\t        \tfor ( var i = 0; i < this.topics.length; i++) {\n\t        \t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t        \t\tremLength += topicStrLength[i] + 2;\n\t        \t}\n\t        \tremLength += this.requestedQos.length; // 1 byte for each topic's Qos\n\t        \t// QoS on Subscribe only\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.UNSUBSCRIBE:\n\t        \tfirst |= 0x02; // Qos = 1;\n\t        \tfor ( var i = 0; i < this.topics.length; i++) {\n\t        \t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t        \t\tremLength += topicStrLength[i] + 2;\n\t        \t}\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.PUBLISH:\n\t        \tif (this.payloadMessage.duplicate) first |= 0x08;\n\t        \tfirst  = first |= (this.payloadMessage.qos << 1);\n\t        \tif (this.payloadMessage.retained) first |= 0x01;\n\t        \tdestinationNameLength = UTF8Length(this.payloadMessage.destinationName);\n\t        \tremLength += destinationNameLength + 2;\t   \n\t        \tvar payloadBytes = this.payloadMessage.payloadBytes;\n\t        \tremLength += payloadBytes.byteLength;  \n\t        \tif (payloadBytes instanceof ArrayBuffer)\n\t        \t\tpayloadBytes = new Uint8Array(payloadBytes);\n\t        \telse if (!(payloadBytes instanceof Uint8Array))\n\t        \t\tpayloadBytes = new Uint8Array(payloadBytes.buffer);\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.DISCONNECT:\n\t        \tbreak;\n\n\t        default:\n\t        \t;\n    \t}\n\n    \t// Now we can allocate a buffer for the message\n\n    \tvar mbi = encodeMBI(remLength);  // Convert the length to MQTT MBI format\n    \tvar pos = mbi.length + 1;        // Offset of start of variable header\n    \tvar buffer = new ArrayBuffer(remLength + pos);\n    \tvar byteStream = new Uint8Array(buffer);    // view it as a sequence of bytes\n\n    \t//Write the fixed header into the buffer\n    \tbyteStream[0] = first;\n    \tbyteStream.set(mbi,1);\n\n    \t// If this is a PUBLISH then the variable header starts with a topic\n    \tif (this.type == MESSAGE_TYPE.PUBLISH)\n    \t\tpos = writeString(this.payloadMessage.destinationName, destinationNameLength, byteStream, pos);\n    \t// If this is a CONNECT then the variable header contains the protocol name/version, flags and keepalive time\n    \t\n    \telse if (this.type == MESSAGE_TYPE.CONNECT) {\n    \t\tbyteStream.set(MqttProtoIdentifier, pos);\n    \t\tpos += MqttProtoIdentifier.length;\n    \t\tvar connectFlags = 0;\n    \t\tif (this.cleanSession) \n    \t\t\tconnectFlags = 0x02;\n    \t\tif (this.willMessage != undefined ) {\n    \t\t\tconnectFlags |= 0x04;\n    \t\t\tconnectFlags |= (this.willMessage.qos<<3);\n    \t\t\tif (this.willMessage.retained) {\n    \t\t\t\tconnectFlags |= 0x20;\n    \t\t\t}\n    \t\t}\n    \t\tif (this.userName != undefined)\n    \t\t\tconnectFlags |= 0x80;\n            if (this.password != undefined)\n    \t\t    connectFlags |= 0x40;\n    \t\tbyteStream[pos++] = connectFlags; \n    \t\tpos = writeUint16 (this.keepAliveInterval, byteStream, pos);\n    \t}\n\n    \t// Output the messageIdentifier - if there is one\n    \tif (this.messageIdentifier != undefined)\n    \t\tpos = writeUint16 (this.messageIdentifier, byteStream, pos);\n\n    \tswitch(this.type) {\n    \t    case MESSAGE_TYPE.CONNECT:\n    \t\t    pos = writeString(this.clientId, UTF8Length(this.clientId), byteStream, pos); \n    \t\t    if (this.willMessage != undefined) {\n    \t\t        pos = writeString(this.willMessage.destinationName, UTF8Length(this.willMessage.destinationName), byteStream, pos);\n    \t\t        pos = writeUint16(willMessagePayloadBytes.byteLength, byteStream, pos);\n    \t\t        byteStream.set(willMessagePayloadBytes, pos);\n\t\t        \tpos += willMessagePayloadBytes.byteLength;\n    \t\t        \n    \t        }\n    \t\tif (this.userName != undefined) \n    \t\t\tpos = writeString(this.userName, UTF8Length(this.userName), byteStream, pos);\n    \t\tif (this.password != undefined) \n    \t\t\tpos = writeString(this.password, UTF8Length(this.password), byteStream, pos);\n    \t\tbreak;\n\n    \t    case MESSAGE_TYPE.PUBLISH:\t\n    \t    \t// PUBLISH has a text or binary payload, if text do not add a 2 byte length field, just the UTF characters.\t\n    \t    \tbyteStream.set(payloadBytes, pos);\n    \t    \t\t\n    \t    \tbreak;\n\n//    \t    case MESSAGE_TYPE.PUBREC:\t\n//    \t    case MESSAGE_TYPE.PUBREL:\t\n//    \t    case MESSAGE_TYPE.PUBCOMP:\t\n//    \t    \tbreak;\n\n    \t    case MESSAGE_TYPE.SUBSCRIBE:\n    \t    \t// SUBSCRIBE has a list of topic strings and request QoS\n    \t    \tfor (var i=0; i<this.topics.length; i++) {\n    \t    \t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n    \t    \t\tbyteStream[pos++] = this.requestedQos[i];\n    \t    \t}\n    \t    \tbreak;\n\n    \t    case MESSAGE_TYPE.UNSUBSCRIBE:\t\n    \t    \t// UNSUBSCRIBE has a list of topic strings\n    \t    \tfor (var i=0; i<this.topics.length; i++)\n    \t    \t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n    \t    \tbreak;\n\n    \t    default:\n    \t    \t// Do nothing.\n    \t}\n\n    \treturn buffer;\n    }\t\n\n    function decodeMessage(input) {\n    \t//var msg = new Object();  // message to be constructed\n    \tvar first = input[0];\n    \tvar type = first >> 4;\n    \tvar messageInfo = first &= 0x0f;\n    \tvar pos = 1;\n    \t\n\n    \t// Decode the remaining length (MBI format)\n\n    \tvar digit;\n    \tvar remLength = 0;\n    \tvar multiplier = 1;\n    \tdo {\n    \t\tdigit = input[pos++];\n    \t\tremLength += ((digit & 0x7F) * multiplier);\n    \t\tmultiplier *= 128;\n    \t} while ((digit & 0x80) != 0);\n\n    \tvar wireMessage = new WireMessage(type);\n    \tswitch(type) {\n            case MESSAGE_TYPE.CONNACK:\n    \t    \twireMessage.topicNameCompressionResponse = input[pos++];\n    \t        wireMessage.returnCode = input[pos++];\n    \t\t    break;\n    \t    \n    \t    case MESSAGE_TYPE.PUBLISH:     \t    \t\n    \t    \tvar qos = (messageInfo >> 1) & 0x03;\n    \t    \t   \t\t    \n    \t    \tvar len = readUint16(input, pos);\n    \t\t    pos += 2;\n    \t\t    var topicName = parseUTF8(input, pos, len);\n    \t\t    pos += len;\n    \t\t    // If QoS 1 or 2 there will be a messageIdentifier\n                if (qos > 0) {\n    \t\t        wireMessage.messageIdentifier = readUint16(input, pos);\n    \t\t        pos += 2;\n                }\n                \n                var message = new Messaging.Message(input.subarray(pos));\n                if ((messageInfo & 0x01) == 0x01) \n    \t    \t\tmessage.retained = true;\n    \t    \tif ((messageInfo & 0x08) == 0x08)\n    \t    \t\tmessage.duplicate =  true;\n                message.qos = qos;\n                message.destinationName = topicName;\n                wireMessage.payloadMessage = message;\t\n    \t\t    break;\n    \t    \n    \t    case  MESSAGE_TYPE.PUBACK:\n    \t    case  MESSAGE_TYPE.PUBREC:\t    \n    \t    case  MESSAGE_TYPE.PUBREL:    \n    \t    case  MESSAGE_TYPE.PUBCOMP:\n    \t    case  MESSAGE_TYPE.UNSUBACK:    \t    \t\n    \t    \twireMessage.messageIdentifier = readUint16(input, pos);\n        \t\tbreak;\n    \t\t    \n    \t    case  MESSAGE_TYPE.SUBACK:\n    \t    \twireMessage.messageIdentifier = readUint16(input, pos);\n        \t\tpos += 2;\n    \t        wireMessage.grantedQos = input.subarray(pos);\t\n    \t\t    break;\n    \t\n    \t    default:\n    \t    \t;\n    \t}\n    \t    \t\n    \treturn wireMessage;\t\n    }\n\n    function writeUint16(input, buffer, offset) {\n    \tbuffer[offset++] = input >> 8;      //MSB\n    \tbuffer[offset++] = input % 256;     //LSB \n    \treturn offset;\n    }\t\n\n    function writeString(input, utf8Length, buffer, offset) {\n    \toffset = writeUint16(utf8Length, buffer, offset);\n    \tstringToUTF8(input, buffer, offset);\n    \treturn offset + utf8Length;\n    }\t\n\n    function readUint16(buffer, offset) {\n    \treturn 256*buffer[offset] + buffer[offset+1];\n    }\t\n\n    /**\n     * Encodes an MQTT Multi-Byte Integer\n     * @private \n     */\n    function encodeMBI(number) {\n    \tvar output = new Array(1);\n    \tvar numBytes = 0;\n\n    \tdo {\n    \t\tvar digit = number % 128;\n    \t\tnumber = number >> 7;\n    \t\tif (number > 0) {\n    \t\t\tdigit |= 0x80;\n    \t\t}\n    \t\toutput[numBytes++] = digit;\n    \t} while ( (number > 0) && (numBytes<4) );\n\n    \treturn output;\n    }\n\n    /**\n     * Takes a String and calculates its length in bytes when encoded in UTF8.\n     * @private\n     */\n    function UTF8Length(input) {\n    \tvar output = 0;\n    \tfor (var i = 0; i<input.length; i++) \n    \t{\n    \t\tvar charCode = input.charCodeAt(i);\n                if (charCode > 0x7FF)\n                   {\n                      // Surrogate pair means its a 4 byte character\n                      if (0xD800 <= charCode && charCode <= 0xDBFF)\n                        {\n                          i++;\n                          output++;\n                        }\n    \t\t       output +=3;\n                   }\n    \t\telse if (charCode > 0x7F)\n    \t\t\toutput +=2;\n    \t\telse\n    \t\t\toutput++;\n    \t} \n    \treturn output;\n    }\n    \n    /**\n     * Takes a String and writes it into an array as UTF8 encoded bytes.\n     * @private\n     */\n    function stringToUTF8(input, output, start) {\n    \tvar pos = start;\n    \tfor (var i = 0; i<input.length; i++) {\n    \t\tvar charCode = input.charCodeAt(i);\n    \t\t\n    \t\t// Check for a surrogate pair.\n    \t\tif (0xD800 <= charCode && charCode <= 0xDBFF) {\n    \t        lowCharCode = input.charCodeAt(++i);\n    \t        if (isNaN(lowCharCode)) {\n    \t        \tthrow new Error(format(ERROR.MALFORMED_UNICODE, [charCode, lowCharCode]));\n    \t        }\n    \t        charCode = ((charCode - 0xD800)<<10) + (lowCharCode - 0xDC00) + 0x10000;\n    \t    \n    \t    }\n    \t\t\n    \t\tif (charCode <= 0x7F) {\n    \t\t\toutput[pos++] = charCode;\n    \t\t} else if (charCode <= 0x7FF) {\n    \t\t\toutput[pos++] = charCode>>6  & 0x1F | 0xC0;\n    \t\t\toutput[pos++] = charCode     & 0x3F | 0x80;\n    \t\t} else if (charCode <= 0xFFFF) {    \t\t\t\t    \n    \t        output[pos++] = charCode>>12 & 0x0F | 0xE0;\n        \t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;   \n        \t\toutput[pos++] = charCode     & 0x3F | 0x80;   \n    \t\t} else {\n    \t\t\toutput[pos++] = charCode>>18 & 0x07 | 0xF0;\n        \t\toutput[pos++] = charCode>>12 & 0x3F | 0x80;\n        \t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;\n        \t\toutput[pos++] = charCode     & 0x3F | 0x80;\n    \t\t};\n    \t} \n    \treturn output;\n    }\n    \n    function parseUTF8(input, offset, length) {\n    \tvar output = \"\";\n    \tvar utf16;\n    \tvar pos = offset;\n\n    \twhile (pos < offset+length)\n    \t{\n    \t\tvar byte1 = input[pos++];\n    \t\tif (byte1 < 128)\n    \t\t\tutf16 = byte1;\n    \t\telse \n    \t\t{\n    \t\t\tvar byte2 = input[pos++]-128;\n    \t\t\tif (byte2 < 0) \n    \t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16),\"\"]));\n    \t\t\tif (byte1 < 0xE0)             // 2 byte character\n    \t\t\t\tutf16 = 64*(byte1-0xC0) + byte2;\n    \t\t\telse \n    \t\t\t{ \n    \t\t\t\tvar byte3 = input[pos++]-128;\n    \t\t\t\tif (byte3 < 0) \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16)]));\n    \t\t\t\tif (byte1 < 0xF0)        // 3 byte character\n    \t\t\t\t\tutf16 = 4096*(byte1-0xE0) + 64*byte2 + byte3;\n                                else\n                                {\n                                   var byte4 = input[pos++]-128;\n                                   if (byte4 < 0) \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n                                   if (byte1 < 0xF8)        // 4 byte character \n                                           utf16 = 262144*(byte1-0xF0) + 4096*byte2 + 64*byte3 + byte4;\n    \t\t\t\t   else                     // longer encodings are not supported  \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n                                }\n    \t\t\t}\n    \t\t}  \n\n                if (utf16 > 0xFFFF)   // 4 byte character - express as a surrogate pair\n                  {\n                     utf16 -= 0x10000;\n                     output += String.fromCharCode(0xD800 + (utf16 >> 10)); // lead character\n                     utf16 = 0xDC00 + (utf16 & 0x3FF);  // trail character\n                  }\n    \t\toutput += String.fromCharCode(utf16);\n    \t}\n    \treturn output;\n    }\n    \n    /** @ignore Repeat keepalive requests, monitor responses.*/\n    var Pinger = function(client, window, keepAliveInterval) { \n    \tthis._client = client;        \t\n     \tthis._window = window;\n     \tthis._keepAliveInterval = keepAliveInterval*1000;     \t\n        this.isReset = false;\n        \n        var pingReq = new WireMessage(MESSAGE_TYPE.PINGREQ).encode(); \n        \n        var doTimeout = function (pinger) {\n\t        return function () {\n\t            return doPing.apply(pinger);\n\t        };\n\t    };\n\t    \n\t    /** @ignore */\n        var doPing = function() { \n        \tif (!this.isReset) {\n        \t\tthis._client._trace(\"Pinger.doPing\", \"Timed out\");\n        \t\tthis._client._disconnected( ERROR.PING_TIMEOUT.code , format(ERROR.PING_TIMEOUT));\n        \t} else {\n        \t    this.isReset = false;\n        \t    this._client._trace(\"Pinger.doPing\", \"send PINGREQ\");\n                this._client.socket.send(pingReq); \n        \t    this.timeout = this._window.setTimeout(doTimeout(this), this._keepAliveInterval);\n            }\n        }\n\n        this.reset = function() {\n        \tthis.isReset = true;\n        \tthis._window.clearTimeout(this.timeout);\n        \tif (this._keepAliveInterval > 0)\n        \t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n        }\n\n        this.cancel = function() {\n        \tthis._window.clearTimeout(this.timeout);\n        }\n     }; \n\n\t/** @ignore Monitor request completion. */\n\tvar Timeout = function(client, window, timeoutSeconds, action, args) {\n\t\tthis._window = window;\n\t\tif (!timeoutSeconds)\n\t\t\ttimeoutSeconds = 30;\n\t\t\n\t\tvar doTimeout = function (action, client, args) {\n\t        return function () {\n\t            return action.apply(client, args);\n\t        };\n\t    };\n        this.timeout = setTimeout(doTimeout(action, client, args), timeoutSeconds * 1000);\n        \n\t\tthis.cancel = function() {\n\t\t\tthis._window.clearTimeout(this.timeout);\n\t\t}\n\t}; \n    \n    /*\n\t * Internal implementation of the Websockets MQTT V3.1 client.\n\t * \n\t * @name Messaging.ClientImpl @constructor \n\t * @param {String} host the DNS nameof the webSocket host. \n\t * @param {Number} port the port number for that host.\n\t * @param {String} clientId the MQ client identifier.\n\t */\n    var ClientImpl = function (host, port, clientId) {\n    \t// Check dependencies are satisfied in this browser.\n    \tif (!(\"WebSocket\" in global && global[\"WebSocket\"] !== null)) {\n            throw new Error(format(ERROR.UNSUPPORTED, [\"WebSocket\"]));\n \t    } \n        if (!(\"localStorage\" in global && global[\"localStorage\"] !== null)) {\n         \tthrow new Error(format(ERROR.UNSUPPORTED, [\"localStorage\"]));\n        }\n        if (!(\"ArrayBuffer\" in global && global[\"ArrayBuffer\"] !== null)) {\n         \tthrow new Error(format(ERROR.UNSUPPORTED, [\"ArrayBuffer\"]));\n        }\n    \t\n        this._trace(\"Messaging.Client\", host, port, clientId);\n\n        this.host = host;\n        this.port = port;\n        this.clientId = clientId;\n\n        // Local storagekeys are qualified with the following string.\n        this._localKey=host+\":\"+port+\":\"+clientId+\":\";\n\n        // Create private instance-only message queue\n        // Internal queue of messages to be sent, in sending order. \n        this._msg_queue = [];\n\n        // Messages we have sent and are expecting a response for, indexed by their respective message ids. \n        this._sentMessages = {};\n\n        // Messages we have received and acknowleged and are expecting a confirm message for\n        // indexed by their respective message ids. \n        this._receivedMessages = {};\n \n        // Internal list of callbacks to be executed when messages\n        // have been successfully sent over web socket, e.g. disconnect\n        // when it doesn't have to wait for ACK, just message is dispatched.\n        this._notify_msg_sent = {};\n\n        // Unique identifier for SEND messages, incrementing\n        // counter as messages are sent.\n        this._message_identifier = 1;\n        \n        // Used to determine the transmission sequence of stored sent messages.\n    \tthis._sequence = 0;\n    \t\n\n        // Load the local state, if any, from the saved version, only restore state relevant to this client.   \t\n        for(key in localStorage)\n        \tif (   key.indexOf(\"Sent:\"+this._localKey) == 0  \t\t    \n        \t    || key.indexOf(\"Received:\"+this._localKey) == 0)\n        \tthis.restore(key);\n    };\n\n    // Messaging Client public instance members. \n    ClientImpl.prototype.host;\n    ClientImpl.prototype.port;\n    ClientImpl.prototype.clientId;\n\n    // Messaging Client private instance members.\n    ClientImpl.prototype.socket;\n    /* true once we have received an acknowledgement to a CONNECT packet. */\n    ClientImpl.prototype.connected = false;\n    /* The largest message identifier allowed, may not be larger than 2**16 but \n     * if set smaller reduces the maximum number of outbound messages allowed.\n     */ \n    ClientImpl.prototype.maxMessageIdentifier = 65536;\n    ClientImpl.prototype.connectOptions;\n    ClientImpl.prototype.hostIndex;\n    ClientImpl.prototype.onConnectionLost;\n    ClientImpl.prototype.onMessageDelivered;\n    ClientImpl.prototype.onMessageArrived;\n    ClientImpl.prototype._msg_queue = null;\n    ClientImpl.prototype._connectTimeout;\n    /* The sendPinger monitors how long we allow before we send data to prove to the server that we are alive. */\n    ClientImpl.prototype.sendPinger = null;\n    /* The receivePinger monitors how long we allow before we require evidence that the server is alive. */\n    ClientImpl.prototype.receivePinger = null;\n    \n    ClientImpl.prototype._traceBuffer = null;\n    ClientImpl.prototype._MAX_TRACE_ENTRIES = 100;\n\n    ClientImpl.prototype.connect = function (connectOptions) {\n    \tvar connectOptionsMasked = this._traceMask(connectOptions, \"password\"); \n    \tthis._trace(\"Client.connect\", connectOptionsMasked, this.socket, this.connected);\n        \n    \tif (this.connected) \n        \tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n    \tif (this.socket)\n    \t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n        \n    \tthis.connectOptions = connectOptions;\n    \t\n    \tif (connectOptions.hosts) {\n    \t    this.hostIndex = 0;\n    \t    this._doConnect(connectOptions.hosts[0], connectOptions.ports[0]);  \n    \t} else {\n            this._doConnect(this.host, this.port);  \t\t\n    \t}\n        \n    };\n\n    ClientImpl.prototype.subscribe = function (filter, subscribeOptions) {\n    \tthis._trace(\"Client.subscribe\", filter, subscribeOptions);\n              \n    \tif (!this.connected)\n    \t    throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n    \t\n        var wireMessage = new WireMessage(MESSAGE_TYPE.SUBSCRIBE);\n        wireMessage.topics=[filter];\n        if (subscribeOptions.qos != undefined)\n        \twireMessage.requestedQos = [subscribeOptions.qos];\n        else \n        \twireMessage.requestedQos = [0];\n        \n        if (subscribeOptions.onSuccess) {\n            wireMessage.callback = function() {subscribeOptions.onSuccess({invocationContext:subscribeOptions.invocationContext});};\n        }\n        if (subscribeOptions.timeout) {\n        \twireMessage.timeOut = new Timeout(this, window, subscribeOptions.timeout, subscribeOptions.onFailure\n        \t\t\t, [{invocationContext:subscribeOptions.invocationContext, \n        \t\t\t\terrorCode:ERROR.SUBSCRIBE_TIMEOUT.code, \n        \t\t\t\terrorMessage:format(ERROR.SUBSCRIBE_TIMEOUT)}]);\n        }\n        \n        // All subscriptions return a SUBACK. \n        this._requires_ack(wireMessage);\n        this._schedule_message(wireMessage);\n    };\n\n    /** @ignore */\n    ClientImpl.prototype.unsubscribe = function(filter, unsubscribeOptions) {  \n    \tthis._trace(\"Client.unsubscribe\", filter, unsubscribeOptions);\n        \n    \tif (!this.connected)\n    \t   throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n    \t\n    \tvar wireMessage = new WireMessage(MESSAGE_TYPE.UNSUBSCRIBE);\n        wireMessage.topics = [filter];\n        \n        if (unsubscribeOptions.onSuccess) {\n        \twireMessage.callback = function() {unsubscribeOptions.onSuccess({invocationContext:unsubscribeOptions.invocationContext});};\n        }\n        if (unsubscribeOptions.timeout) {\n        \twireMessage.timeOut = new Timeout(this, window, unsubscribeOptions.timeout, unsubscribeOptions.onFailure\n        \t\t\t, [{invocationContext:unsubscribeOptions.invocationContext,\n        \t\t\t\terrorCode:ERROR.UNSUBSCRIBE_TIMEOUT.code,\n        \t\t\t\terrorMessage:format(ERROR.UNSUBSCRIBE_TIMEOUT)}]);\n        }\n     \n        // All unsubscribes return a SUBACK.         \n        this._requires_ack(wireMessage);\n        this._schedule_message(wireMessage);\n    };\n     \n    ClientImpl.prototype.send = function (message) {\n        this._trace(\"Client.send\", message);\n\n        if (!this.connected)\n           throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n        \n        wireMessage = new WireMessage(MESSAGE_TYPE.PUBLISH);\n        wireMessage.payloadMessage = message;\n        \n        if (message.qos > 0)\n            this._requires_ack(wireMessage);\n        else if (this.onMessageDelivered)\n        \tthis._notify_msg_sent[wireMessage] = this.onMessageDelivered(wireMessage.payloadMessage);\n        this._schedule_message(wireMessage);\n    };\n    \n    ClientImpl.prototype.disconnect = function () {\n        this._trace(\"Client.disconnect\");\n\n        if (!this.socket)\n    \t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connecting or connected\"]));\n        \n        wireMessage = new WireMessage(MESSAGE_TYPE.DISCONNECT);\n\n        // Run the disconnected call back as soon as the message has been sent,\n        // in case of a failure later on in the disconnect processing.\n        // as a consequence, the _disconected call back may be run several times.\n        this._notify_msg_sent[wireMessage] = scope(this._disconnected, this);\n\n        this._schedule_message(wireMessage);\n    };\n    \n   ClientImpl.prototype.getTraceLog = function () {\n        if ( this._traceBuffer !== null ) {\n            this._trace(\"Client.getTraceLog\", new Date());\n            this._trace(\"Client.getTraceLog in flight messages\", this._sentMessages.length);\n            for (key in this._sentMessages)\n                this._trace(\"_sentMessages \",key, this._sentMessages[key]);\n            for (key in this._receivedMessages)\n                this._trace(\"_receivedMessages \",key, this._receivedMessages[key]);\n\n            return this._traceBuffer;\n        }\n    };\n\n    ClientImpl.prototype.startTrace = function () {\n        if ( this._traceBuffer === null ) {\n            this._traceBuffer = [];\n        }\n        this._trace(\"Client.startTrace\", new Date(), version);\n    };\n\n    ClientImpl.prototype.stopTrace = function () {\n        delete this._traceBuffer;\n    };\n\n    ClientImpl.prototype._doConnect = function (host, port) { \t        \n        // When the socket is open, this client will send the CONNECT WireMessage using the saved parameters. \n        if (this.connectOptions.useSSL)\n          wsurl = [\"wss://\", host, \":\", port, \"/mqtt\"].join(\"\");\n        else\n          wsurl = [\"ws://\", host, \":\", port, \"/mqtt\"].join(\"\");\n        this.connected = false;\n        this.socket = new WebSocket(wsurl, 'mqttv3.1');\n        this.socket.binaryType = 'arraybuffer';\n        this.socket.onopen = scope(this._on_socket_open, this);\n        this.socket.onmessage = scope(this._on_socket_message, this);\n        this.socket.onerror = scope(this._on_socket_error, this);\n        this.socket.onclose = scope(this._on_socket_close, this);\n        \n        this.sendPinger = new Pinger(this, window, this.connectOptions.keepAliveInterval);\n        this.receivePinger = new Pinger(this, window, this.connectOptions.keepAliveInterval);\n        \n        this._connectTimeout = new Timeout(this, window, this.connectOptions.timeout, this._disconnected,  [ERROR.CONNECT_TIMEOUT.code, format(ERROR.CONNECT_TIMEOUT)]);\n    };\n\n    \n    // Schedule a new message to be sent over the WebSockets\n    // connection. CONNECT messages cause WebSocket connection\n    // to be started. All other messages are queued internally\n    // until this has happened. When WS connection starts, process\n    // all outstanding messages. \n    ClientImpl.prototype._schedule_message = function (message) {\n        this._msg_queue.push(message);\n        // Process outstanding messages in the queue if we have an  open socket, and have received CONNACK. \n        if (this.connected) {\n            this._process_queue();\n        }\n    };\n\n    ClientImpl.prototype.store = function(prefix, wireMessage) {\n    \tstoredMessage = {type:wireMessage.type, messageIdentifier:wireMessage.messageIdentifier, version:1};\n    \t\n    \tswitch(wireMessage.type) {\n\t      case MESSAGE_TYPE.PUBLISH:\n\t    \t  if(wireMessage.pubRecReceived)\n\t    \t\t  storedMessage.pubRecReceived = true;\n\t    \t  \n\t    \t  // Convert the payload to a hex string.\n\t    \t  storedMessage.payloadMessage = {};\n\t    \t  var hex = \"\";\n\t          var messageBytes = wireMessage.payloadMessage.payloadBytes;\n\t          for (var i=0; i<messageBytes.length; i++) {\n\t            if (messageBytes[i] <= 0xF)\n\t              hex = hex+\"0\"+messageBytes[i].toString(16);\n\t            else \n\t              hex = hex+messageBytes[i].toString(16);\n\t          }\n\t    \t  storedMessage.payloadMessage.payloadHex = hex;\n\t    \t  \n\t    \t  storedMessage.payloadMessage.qos = wireMessage.payloadMessage.qos;\n\t    \t  storedMessage.payloadMessage.destinationName = wireMessage.payloadMessage.destinationName;\n\t    \t  if (wireMessage.payloadMessage.duplicate) \n\t    \t\t  storedMessage.payloadMessage.duplicate = true;\n\t    \t  if (wireMessage.payloadMessage.retained) \n\t    \t\t  storedMessage.payloadMessage.retained = true;\t   \n\t    \t  \n\t    \t  // Add a sequence number to sent messages.\n\t    \t  if ( prefix.indexOf(\"Sent:\") == 0 ) {\n\t    \t\t  if ( wireMessage.sequence === undefined )\n\t    \t\t      wireMessage.sequence = ++this._sequence;\n\t    \t\t  storedMessage.sequence = wireMessage.sequence;\n\t    \t  }\n\t          break;    \n\t          \n\t        default:\n\t        \tthrow Error(format(ERROR.INVALID_STORED_DATA, [key, storedMessage]));\n  \t    }\n    \tlocalStorage.setItem(prefix+this._localKey+wireMessage.messageIdentifier, JSON.stringify(storedMessage));\n    };\n    \n    ClientImpl.prototype.restore = function(key) {    \t\n    \tvar value = localStorage.getItem(key);\n    \tvar storedMessage = JSON.parse(value);\n    \t\n    \tvar wireMessage = new WireMessage(storedMessage.type, storedMessage);\n    \t\n    \tswitch(storedMessage.type) {\n\t      case MESSAGE_TYPE.PUBLISH:\n\t    \t  // Replace the payload message with a Message object.\n\t    \t  var hex = storedMessage.payloadMessage.payloadHex;\n\t    \t  var buffer = new ArrayBuffer((hex.length)/2);\n              var byteStream = new Uint8Array(buffer); \n              var i = 0;\n              while (hex.length >= 2) { \n            \t  var x = parseInt(hex.substring(0, 2), 16);\n\t              hex = hex.substring(2, hex.length);\n\t              byteStream[i++] = x;\n\t          }\n              var payloadMessage = new Messaging.Message(byteStream);\n\t      \t  \n\t    \t  payloadMessage.qos = storedMessage.payloadMessage.qos;\n\t    \t  payloadMessage.destinationName = storedMessage.payloadMessage.destinationName;\n              if (storedMessage.payloadMessage.duplicate) \n\t    \t\t  payloadMessage.duplicate = true;\n\t    \t  if (storedMessage.payloadMessage.retained) \n\t    \t\t  payloadMessage.retained = true;\t \n\t    \t  wireMessage.payloadMessage = payloadMessage;\n              \n\t          break;    \n\t          \n\t        default:\n\t          throw Error(format(ERROR.INVALID_STORED_DATA, [key, value]));\n\t    }\n    \t    \t\t    \t\n    \tif (key.indexOf(\"Sent:\"+this._localKey) == 0) {      \n    \t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;    \t\t    \n    \t} else if (key.indexOf(\"Received:\"+this._localKey) == 0) {\n    \t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n    \t}\n    };\n    \n    ClientImpl.prototype._process_queue = function () {\n        var message = null;\n        // Process messages in order they were added\n        var fifo = this._msg_queue.reverse();\n\n        // Send all queued messages down socket connection\n        while ((message = fifo.pop())) {\n            this._socket_send(message);\n            // Notify listeners that message was successfully sent\n            if (this._notify_msg_sent[message]) {\n                this._notify_msg_sent[message]();\n                delete this._notify_msg_sent[message];\n            }\n        }\n    };\n\n    /**\n     * @ignore\n     * Expect an ACK response for this message. Add message to the set of in progress\n     * messages and set an unused identifier in this message.\n     */\n    ClientImpl.prototype._requires_ack = function (wireMessage) {\n    \tvar messageCount = Object.keys(this._sentMessages).length;\n        if (messageCount > this.maxMessageIdentifier)\n            throw Error (\"Too many messages:\"+messageCount);\n\n        while(this._sentMessages[this._message_identifier] !== undefined) {\n            this._message_identifier++;\n        }\n        wireMessage.messageIdentifier = this._message_identifier;\n        this._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n        if (wireMessage.type === MESSAGE_TYPE.PUBLISH) {\n        \tthis.store(\"Sent:\", wireMessage);\n        }\n        if (this._message_identifier === this.maxMessagIdentifier) {\n            this._message_identifier = 1;\n        }\n    };\n\n    /** \n     * @ignore\n     * Called when the underlying websocket has been opened.\n     */\n    ClientImpl.prototype._on_socket_open = function () {        \n        // Create the CONNECT message object.\n        var wireMessage = new WireMessage(MESSAGE_TYPE.CONNECT, this.connectOptions); \n        wireMessage.clientId = this.clientId;\n        this._socket_send(wireMessage);\n    };\n\n    /** \n     * @ignore\n     * Called when the underlying websocket has received a complete packet.\n     */\n    ClientImpl.prototype._on_socket_message = function (event) {\n        this._trace(\"Client._on_socket_message\", event.data);\n        \n        // Reset the receive ping timer, we now have evidence the server is alive.\n        this.receivePinger.reset();\n        var byteArray = new Uint8Array(event.data);\n        try {\n            var wireMessage = decodeMessage(byteArray);\n        } catch (error) {\n        \tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message]));\n        \treturn;\n        }\n        this._trace(\"Client._on_socket_message\", wireMessage);\n\n        switch(wireMessage.type) {\n            case MESSAGE_TYPE.CONNACK:\n            \tthis._connectTimeout.cancel();\n            \t\n            \t// If we have started using clean session then clear up the local state.\n            \tif (this.connectOptions.cleanSession) {\n    \t\t    \tfor (key in this._sentMessages) {\t    \t\t\n    \t\t    \t    var sentMessage = this._sentMessages[key];\n    \t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+sentMessage.messageIdentifier);\n    \t\t    \t}\n    \t\t\t\tthis._sentMessages = {};\n\n    \t\t\t\tfor (key in this._receivedMessages) {\n    \t\t\t\t\tvar receivedMessage = this._receivedMessages[key];\n    \t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+receivedMessage.messageIdentifier);\n    \t\t\t\t}\n    \t\t\t\tthis._receivedMessages = {};\n            \t}\n            \t// Client connected and ready for business.\n            \tif (wireMessage.returnCode === 0) {\n        \t        this.connected = true;\n        \t        // Jump to the end of the list of hosts and stop looking for a good host.\n        \t        if (this.connectOptions.hosts)\n        \t            this.hostIndex = this.connectOptions.hosts.length;\n                } else {\n                    this._disconnected(ERROR.CONNACK_RETURNCODE.code , format(ERROR.CONNACK_RETURNCODE, [wireMessage.returnCode, CONNACK_RC[wireMessage.returnCode]]));\n                    break;\n                }\n            \t\n        \t    // Resend messages.\n            \tvar sequencedMessages = new Array();\n            \tfor (var msgId in this._sentMessages) {\n            \t    if (this._sentMessages.hasOwnProperty(msgId))\n            \t        sequencedMessages.push(this._sentMessages[msgId]);\n            \t}\n          \n        \t    // Sort sentMessages into the original sent order.\n            \tvar sequencedMessages = sequencedMessages.sort(function(a,b) {return a.sequence - b.sequence;} );\n        \t    for (var i=0, len=sequencedMessages.length; i<len; i++) {\n        \t    \tvar sentMessage = sequencedMessages[i];\n        \t    \tif (sentMessage.type == MESSAGE_TYPE.PUBLISH && sentMessage.pubRecReceived) {\n        \t    \t    var pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:sentMessage.messageIdentifier});\n        \t            this._schedule_message(pubRelMessage);\n        \t    \t} else {\n        \t    \t\tthis._schedule_message(sentMessage);\n        \t    \t};\n        \t    }\n\n        \t    // Execute the connectOptions.onSuccess callback if there is one.\n        \t    if (this.connectOptions.onSuccess) {\n        \t        this.connectOptions.onSuccess({invocationContext:this.connectOptions.invocationContext});\n        \t    }\n\n        \t    // Process all queued messages now that the connection is established. \n        \t    this._process_queue();\n        \t    break;\n        \n            case MESSAGE_TYPE.PUBLISH:\n                this._receivePublish(wireMessage);\n                break;\n\n            case MESSAGE_TYPE.PUBACK:\n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                 // If this is a re flow of a PUBACK after we have restarted receivedMessage will not exist.\n            \tif (sentMessage) {\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                    localStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n                    if (this.onMessageDelivered)\n                    \tthis.onMessageDelivered(sentMessage.payloadMessage);\n                }\n            \tbreak;\n            \n            case MESSAGE_TYPE.PUBREC:\n                var sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                // If this is a re flow of a PUBREC after we have restarted receivedMessage will not exist.\n                if (sentMessage) {\n                \tsentMessage.pubRecReceived = true;\n                    var pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:wireMessage.messageIdentifier});\n                    this.store(\"Sent:\", sentMessage);\n                    this._schedule_message(pubRelMessage);\n                }\n                break;\n            \t            \t\n            case MESSAGE_TYPE.PUBREL:\n                var receivedMessage = this._receivedMessages[wireMessage.messageIdentifier];\n                localStorage.removeItem(\"Received:\"+this._localKey+wireMessage.messageIdentifier);\n                // If this is a re flow of a PUBREL after we have restarted receivedMessage will not exist.\n                if (receivedMessage) {\n                    this._receiveMessage(receivedMessage);\n                    delete this._receivedMessages[wireMessage.messageIdentifier];\n                }\n                // Always flow PubComp, we may have previously flowed PubComp but the server lost it and restarted.\n                pubCompMessage = new WireMessage(MESSAGE_TYPE.PUBCOMP, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubCompMessage);                    \n                    \n                \n                break;\n\n            case MESSAGE_TYPE.PUBCOMP: \n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n            \tdelete this._sentMessages[wireMessage.messageIdentifier];\n                localStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n                if (this.onMessageDelivered)\n                \tthis.onMessageDelivered(sentMessage.payloadMessage);\n                break;\n                \n            case MESSAGE_TYPE.SUBACK:\n                var sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                if (sentMessage) {\n                \tif(sentMessage.timeOut)\n                \t    sentMessage.timeOut.cancel();\n                    if (sentMessage.callback) {\n                        sentMessage.callback();\n                    }\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                }\n                break;\n        \t    \n            case MESSAGE_TYPE.UNSUBACK:\n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                if (sentMessage) { \n                \tif (sentMessage.timeOut)\n                        sentMessage.timeOut.cancel();\n                    if (sentMessage.callback) {\n                        sentMessage.callback();\n                    }\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                }\n\n                break;\n                \n            case MESSAGE_TYPE.PINGRESP:\n            \t/* The sendPinger or receivePinger may have sent a ping, the receivePinger has already been reset. */\n            \tthis.sendPinger.reset();\n            \tbreak;\n            \t\n            case MESSAGE_TYPE.DISCONNECT:\n            \t// Clients do not expect to receive disconnect packets.\n            \tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n            \tbreak;\n\n            default:\n            \tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n        }; \n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._on_socket_error = function (error) {\n    \tthis._disconnected(ERROR.SOCKET_ERROR.code , format(ERROR.SOCKET_ERROR, [error.data]));\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._on_socket_close = function () {\n        this._disconnected(ERROR.SOCKET_CLOSE.code , format(ERROR.SOCKET_CLOSE));\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._socket_send = function (wireMessage) {\n    \tif (wireMessage.type == 1) {\n    \t\tvar wireMessageMasked = this._traceMask(wireMessage, \"password\"); \n    \t\tthis._trace(\"Client._socket_send\", wireMessageMasked);\n    \t}\n    \telse this._trace(\"Client._socket_send\", wireMessage);\n        \n        this.socket.send(wireMessage.encode());\n        /* We have proved to the server we are alive. */\n        this.sendPinger.reset();\n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._receivePublish = function (wireMessage) {\n        switch(wireMessage.payloadMessage.qos) {\n            case \"undefined\":\n            case 0:\n                this._receiveMessage(wireMessage);\n                break;\n\n            case 1:\n                var pubAckMessage = new WireMessage(MESSAGE_TYPE.PUBACK, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubAckMessage);\n                this._receiveMessage(wireMessage);\n                break;\n\n            case 2:\n                this._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n                this.store(\"Received:\", wireMessage);\n                var pubRecMessage = new WireMessage(MESSAGE_TYPE.PUBREC, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubRecMessage);\n\n                break;\n\n            default:\n                throw Error(\"Invaild qos=\"+wireMmessage.payloadMessage.qos);\n        };\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._receiveMessage = function (wireMessage) {\n        if (this.onMessageArrived) {\n            this.onMessageArrived(wireMessage.payloadMessage);\n        }\n    };\n\n    /**\n     * @ignore\n     * Client has disconnected either at its own request or because the server\n     * or network disconnected it. Remove all non-durable state.\n     * @param {errorCode} [number] the error number.\n     * @param {errorText} [string] the error text.\n     */\n    ClientImpl.prototype._disconnected = function (errorCode, errorText) {\n    \tthis._trace(\"Client._disconnected\", errorCode, errorText);\n    \t\n    \tthis.sendPinger.cancel();\n    \tthis.receivePinger.cancel();\n    \tif (this._connectTimeout)\n    \t    this._connectTimeout.cancel();\n    \t// Clear message buffers.\n        this._msg_queue = [];\n        this._notify_msg_sent = {};\n       \n        if (this.socket) {\n            // Cancel all socket callbacks so that they cannot be driven again by this socket.\n            this.socket.onopen = null;\n            this.socket.onmessage = null;\n            this.socket.onerror = null;\n            this.socket.onclose = null;\n            if (this.socket.readyState === 1)\n                this.socket.close();\n            delete this.socket;           \n        }\n        \n        if (this.connectOptions.hosts && this.hostIndex < this.connectOptions.hosts.length-1) {\n        \t// Try the next host.\n        \tthis.hostIndex++;\n        \tthis._doConnect(this.connectOptions.hosts[this.hostIndex], this.connectOptions.ports[this.hostIndex]);\n        \n        } else {\n        \n            if (errorCode === undefined) {\n        \t    errorCode = ERROR.OK.code;\n        \t    errorText = format(ERROR.OK);\n            }\n        \t\n            // Run any application callbacks last as they may attempt to reconnect and hence create a new socket.\n            if (this.connected) {\n                this.connected = false;\n                // Execute the connectionLostCallback if there is one, and we were connected.       \n                if (this.onConnectionLost)\n            \t    this.onConnectionLost({errorCode:errorCode, errorMessage:errorText});      \t\n            } else {\n        \t    // Otherwise we never had a connection, so indicate that the connect has failed.\n                if(this.connectOptions.onFailure)\n            \t    this.connectOptions.onFailure({invocationContext:this.connectOptions.invocationContext, errorCode:errorCode, errorMessage:errorText});\n            }\n        }\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._trace = function () {\n        if ( this._traceBuffer !== null ) {  \n            for (var i = 0, max = arguments.length; i < max; i++) {\n                if ( this._traceBuffer.length == this._MAX_TRACE_ENTRIES ) {    \n                    this._traceBuffer.shift();              \n                }\n                if (i === 0) this._traceBuffer.push(arguments[i]);\n                else if (typeof arguments[i] === \"undefined\" ) this._traceBuffer.push(arguments[i]);\n                else this._traceBuffer.push(\"  \"+JSON.stringify(arguments[i]));\n           };\n        };\n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._traceMask = function (traceObject, masked) {\n        var traceObjectMasked = {};\n\t    for (var attr in traceObject) {\n\t        if (traceObject.hasOwnProperty(attr)) {\n\t        \tif (attr == masked) \n\t        \t\ttraceObjectMasked[attr] = \"******\";\n\t        \telse\n\t        \t\ttraceObjectMasked[attr] = traceObject[attr];\n\t        } \n\t    }\n\t    return traceObjectMasked;\n    };\n\n    // ------------------------------------------------------------------------\n    // Public Programming interface.\n    // ------------------------------------------------------------------------\n    \n    /** \n     * The JavaScript application communicates to the server using a Messaging.Client object. \n     * <p>\n     * Other programming languages,\n     * <a href=\"/clients/java/doc/javadoc/com/ibm/micro/client/mqttv3/MqttClient.html\"><big>Java</big></a>,\n     * <a href=\"/clients/c/doc/html/index.html\"><big>C</big></a>.\n     * <p>\n     * Most applications will create just one Client object and then call its connect() method,\n     * however applications can create more than one Client object if they wish. \n     * In this case the combination of host, port and clientId attributes must be different for each Client object.\n     * <p>\n     * The send, subscribe and unsubscribe methods are implemented as asynchronous JavaScript methods \n     * (even though the underlying protocol exchange might be synchronous in nature). \n     * This means they signal their completion by calling back to the application, \n     * via Success or Failure callback functions provided by the application on the method in question. \n     * Such callbacks are called at most once per method invocation and do not persist beyond the lifetime \n     * of the script that made the invocation.\n     * <p>\n     * In contrast there are some callback functions <i> most notably onMessageArrived</i> \n     * that are defined on the Messaging.Client object.  \n     * These may get called multiple times, and aren't directly related to specific method invocations made by the client. \n     *\n     * @name Messaging.Client    \n     * \n     * @constructor\n     * Creates a Messaging.Client object that can be used to communicate with a Messaging server.\n     *  \n     * @param {string} host the address of the messaging server, as a DNS name or dotted decimal IP address.\n     * @param {number} port the port number in the host to connect to.\n     * @param {string} clientId the Messaging client identifier, between 1 and 23 characters in length.\n     * \n     * @property {string} host <i>read only</i> the server's DNS hostname or dotted decimal IP address.\n     * @property {number} port <i>read only</i> the server's port.\n     * @property {string} clientId <i>read only</i> used when connecting to the server.\n     * @property {function} onConnectionLost called when a connection has been lost, \n     * after a connect() method has succeeded.\n     * Establish the call back used when a connection has been lost. The connection may be\n     * lost because the client initiates a disconnect or because the server or network \n     * cause the client to be disconnected. The disconnect call back may be called without \n     * the connectionComplete call back being invoked if, for example the client fails to \n     * connect.\n     * A single response object parameter is passed to the onConnectionLost callback containing the following fields:\n     * <ol>   \n     * <li>errorCode\n     * <li>errorMessage       \n     * </ol>\n     * @property {function} onMessageDelivered called when a message has been delivered. \n     * All processing that this Client will ever do has been completed. So, for example,\n     * in the case of a Qos=2 message sent by this client, the PubComp flow has been received from the server\n     * and the message has been removed from persistent storage before this callback is invoked. \n     * Parameters passed to the onMessageDelivered callback are:\n     * <ol>   \n     * <li>Messaging.Message that was delivered.\n     * </ol>    \n     * @property {function} onMessageArrived called when a message has arrived in this Messaging.client. \n     * Parameters passed to the onMessageArrived callback are:\n     * <ol>   \n     * <li>Messaging.Message that has arrived.\n     * </ol>    \n     */\n    var Client = function (host, port, clientId) {\n    \tif (typeof host !== \"string\")\n        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof host, \"host\"]));\n    \tif (typeof port !== \"number\" || port < 0)\n        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof port, \"port\"]));\n    \t\n    \tvar clientIdLength = 0;\n    \tfor (var i = 0; i<clientId.length; i++) {\n    \t\tvar charCode = clientId.charCodeAt(i);                   \n    \t\tif (0xD800 <= charCode && charCode <= 0xDBFF)  {    \t\t\t\n                 i++; // Surrogate pair.\n            }   \t\t   \n    \t\tclientIdLength++;\n    \t}     \t   \t\n        if (typeof clientId !== \"string\" || clientIdLength < 1 | clientIdLength > 23)\n        \tthrow new Error(format(ERROR.INVALID_ARGUMENT, [clientId, \"clientId\"])); \n    \t\n        var client = new ClientImpl(host, port, clientId);\n        this._getHost =  function() { return client.host; };\n    \tthis._setHost = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n         \t\n        this._getPort = function() { return client.port; };\n    \tthis._setPort = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n    \t\n    \tthis._getClientId = function() { return client.clientId; };\n    \tthis._setClientId = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n        \n        this._getOnConnectionLost = function() { return client.onConnectionLost; };\n        this._setOnConnectionLost = function(newOnConnectionLost) { \n            if (typeof newOnConnectionLost === \"function\")\n            \tclient.onConnectionLost = newOnConnectionLost;\n            else \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnectionLost, \"onConnectionLost\"]));\n        };\n\n        this._getOnMessageDelivered = function() { return client.onMessageDelivered; };\n    \tthis._setOnMessageDelivered = function(newOnMessageDelivered) { \n    \t\tif (typeof newOnMessageDelivered === \"function\")\n    \t\t\tclient.onMessageDelivered = newOnMessageDelivered;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageDelivered, \"onMessageDelivered\"]));\n    \t};\n       \n        this._getOnMessageArrived = function() { return client.onMessageArrived; };\n    \tthis._setOnMessageArrived = function(newOnMessageArrived) { \n    \t\tif (typeof newOnMessageArrived === \"function\")\n    \t\t\tclient.onMessageArrived = newOnMessageArrived;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageArrived, \"onMessageArrived\"]));\n    \t};\n        \n        /** \n         * Connect this Messaging client to its server. \n         * \n         * @name Messaging.Client#connect\n         * @function\n         * @param {Object} [connectOptions] attributes used with the connection. \n         * <p>\n         * Properties of the connect options are: \n         * @config {number} [timeout] If the connect has not succeeded within this number of seconds, it is deemed to have failed.\n         *                            The default is 30 seconds.\n         * @config {string} [userName] Authentication username for this connection.\n         * @config {string} [password] Authentication password for this connection.\n         * @config {Messaging.Message} [willMessage] sent by the server when the client disconnects abnormally.\n         * @config {Number} [keepAliveInterval] the server disconnects this client if there is no activity for this\n         *                number of seconds. The default value of 60 seconds is assumed if not set.\n         * @config {boolean} [cleanSession] if true(default) the client and server persistent state is deleted on successful connect.\n         * @config {boolean} [useSSL] if present and true, use an SSL Websocket connection.\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the connect acknowledgement has been received from the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext as passed in to the onSuccess method in the connectOptions.       \n         * </ol>\n         * @config {function} [onFailure] called when the connect request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext as passed in to the onFailure method in the connectOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {Array} [hosts] If present this set of hostnames is tried in order in place \n         * of the host and port paramater on the construtor. The hosts and the matching ports are tried one at at time in order until\n         * one of then succeeds.\n         * @config {Array} [ports] If present this set of ports matching the hosts.\n         * @throws {InvalidState} if the client is not in disconnected state. The client must have received connectionLost\n         * or disconnected before calling connect for a second or subsequent time.\n         */\n        this.connect = function (connectOptions) {\n        \tconnectOptions = connectOptions || {} ;\n        \tvalidate(connectOptions,  {timeout:\"number\",\n        \t\t\t                   userName:\"string\", \n        \t\t                       password:\"string\", \n        \t\t                       willMessage:\"object\", \n        \t\t                       keepAliveInterval:\"number\", \n        \t\t                       cleanSession:\"boolean\", \n        \t\t                       useSSL:\"boolean\",\n        \t\t                       invocationContext:\"object\", \n      \t\t                           onSuccess:\"function\", \n      \t\t                           onFailure:\"function\",\n      \t\t                           hosts:\"object\",\n      \t\t                           ports:\"object\"});\n        \t\n        \t// If no keep alive interval is set, assume 60 seconds.\n            if (connectOptions.keepAliveInterval === undefined)\n            \tconnectOptions.keepAliveInterval = 60;\n\n        \tif (connectOptions.willMessage) {\n                if (!(connectOptions.willMessage instanceof Message))\n            \t    throw new Error(format(ERROR.INVALID_TYPE, [connectOptions.willMessage, \"connectOptions.willMessage\"]));\n                // The will message must have a payload that can be represented as a string.\n                // Cause the willMessage to throw an exception if this is not the case.\n            \tconnectOptions.willMessage.stringPayload;\n            \t\n            \tif (typeof connectOptions.willMessage.destinationName === \"undefined\")\n                \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.willMessage.destinationName, \"connectOptions.willMessage.destinationName\"]));\n        \t}\n        \tif (typeof connectOptions.cleanSession === \"undefined\")\n        \t\tconnectOptions.cleanSession = true;\n        \tif (connectOptions.hosts) {\n        \t\tif (!connectOptions.ports)\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tif (!(connectOptions.hosts instanceof Array) )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n        \t\tif (!(connectOptions.ports instanceof Array) )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tif (connectOptions.hosts.length <1 )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n        \t\tif (connectOptions.hosts.length != connectOptions.ports.length)\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tfor (var i = 0; i<connectOptions.hosts.length; i++) {\n        \t\t\tif (typeof connectOptions.hosts[i] !== \"string\")\n        \t        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.hosts[i], \"connectOptions.hosts[\"+i+\"]\"]));\n        \t\t\tif (typeof connectOptions.ports[i] !== \"number\" || connectOptions.ports[i] < 0)\n        \t        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.ports[i], \"connectOptions.ports[\"+i+\"]\"]));\n        \t    }\n        \t}\n\n        \tclient.connect(connectOptions);\n        };\n     \n        /** \n         * Subscribe for messages, request receipt of a copy of messages sent to the destinations described by the filter.\n         * \n         * @name Messaging.Client#subscribe\n         * @function\n         * @param {string} filter describing the destinations to receive messages from.\n         * <br>\n         * @param {object} [subscribeOptions] used to control the subscription, as follows:\n         * <p>\n         * @config {number} [qos] the maiximum qos of any publications sent as a result of making this subscription.\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the subscribe acknowledgement has been received from the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the subscribeOptions.       \n         * </ol>\n         * @config {function} [onFailure] called when the subscribe request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the subscribeOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {number} [timeout] which if present determines the number of seconds after which the onFailure calback is called\n         * the presence of a timeout does not prevent the onSuccess callback from being called when the MQTT Suback is eventually received.         \n    \t * @throws {InvalidState} if the client is not in connected state.\n         */\n        this.subscribe = function (filter, subscribeOptions) {\n        \tif (typeof filter !== \"string\")\n        \t\tthrow new Error(\"Invalid argument:\"+filter);\n        \tsubscribeOptions = subscribeOptions || {} ;\n        \tvalidate(subscribeOptions,  {qos:\"number\", \n        \t\t                         invocationContext:\"object\", \n        \t\t                         onSuccess:\"function\", \n        \t\t                         onFailure:\"function\",\n        \t\t                         timeout:\"number\"\n        \t\t                        });\n        \tif (subscribeOptions.timeout && !subscribeOptions.onFailure)\n        \t\tthrow new Error(\"subscribeOptions.timeout specified with no onFailure callback.\");\n        \tif (typeof subscribeOptions.qos !== \"undefined\" \n        \t\t&& !(subscribeOptions.qos === 0 || subscribeOptions.qos === 1 || subscribeOptions.qos === 2 ))\n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [subscribeOptions.qos, \"subscribeOptions.qos\"]));\n            client.subscribe(filter, subscribeOptions);\n        };\n\n        /**\n         * Unsubscribe for messages, stop receiving messages sent to destinations described by the filter.\n         * \n         * @name Messaging.Client#unsubscribe\n         * @function\n         * @param {string} filter describing the destinations to receive messages from.\n         * @param {object} [unsubscribeOptions] used to control the subscription, as follows:\n         * <p>\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the unsubscribe acknowledgement has been receive dfrom the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the unsubscribeOptions.     \n         * </ol>\n         * @config {function} [onFailure] called when the unsubscribe request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the unsubscribeOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {number} [timeout] which if present determines the number of seconds after which the onFailure callback is called, the\n         * presence of a timeout does not prevent the onSuccess callback from being called when the MQTT UnSuback is eventually received.\n         * @throws {InvalidState} if the client is not in connected state.\n         */\n        this.unsubscribe = function (filter, unsubscribeOptions) {\n        \tif (typeof filter !== \"string\")\n        \t\tthrow new Error(\"Invalid argument:\"+filter);\n        \tunsubscribeOptions = unsubscribeOptions || {} ;\n        \tvalidate(unsubscribeOptions,  {invocationContext:\"object\", \n        \t\t                           onSuccess:\"function\", \n        \t\t                           onFailure:\"function\",\n        \t\t                           timeout:\"number\"\n        \t\t                          });\n        \tif (unsubscribeOptions.timeout && !unsubscribeOptions.onFailure)\n        \t\tthrow new Error(\"unsubscribeOptions.timeout specified with no onFailure callback.\");\n            client.unsubscribe(filter, unsubscribeOptions);\n        };\n\n        /**\n         * Send a message to the consumers of the destination in the Message.\n         * \n         * @name Messaging.Client#send\n         * @function \n         * @param {Messaging.Message} message to send.\n         \n         * @throws {InvalidState} if the client is not in connected state.\n         */   \n        this.send = function (message) {       \t\n            if (!(message instanceof Message))\n                throw new Error(\"Invalid argument:\"+typeof message);\n            if (typeof message.destinationName === \"undefined\")\n            \tthrow new Error(\"Invalid parameter Message.destinationName:\"+message.destinationName);\n           \n            client.send(message);   \n        };\n        \n        /** \n         * Normal disconnect of this Messaging client from its server.\n         * \n         * @name Messaging.Client#disconnect\n         * @function\n         * @throws {InvalidState} if the client is not in connected or connecting state.     \n         */\n        this.disconnect = function () {\n        \tclient.disconnect();\n        };\n        \n        /** \n         * Get the contents of the trace log.\n         * \n         * @name Messaging.Client#getTraceLog\n         * @function\n         * @return {Object[]} tracebuffer containing the time ordered trace records.\n         */\n        this.getTraceLog = function () {\n        \treturn client.getTraceLog();\n        }\n        \n        /** \n         * Start tracing.\n         * \n         * @name Messaging.Client#startTrace\n         * @function\n         */\n        this.startTrace = function () {\n        \tclient.startTrace();\n        };\n        \n        /** \n         * Stop tracing.\n         * \n         * @name Messaging.Client#stopTrace\n         * @function\n         */\n        this.stopTrace = function () {\n            client.stopTrace();\n        };\n    };\n\n    Client.prototype = {\n        get host() { return this._getHost(); },\n        set host(newHost) { this._setHost(newHost); },\n        \t\n        get port() { return this._getPort(); },\n        set port(newPort) { this._setPort(newPort); },\n        \t\n        get clientId() { return this._getClientId(); },\n        set clientId(newClientId) { this._setClientId(newClientId); },\n\n        get onConnectionLost() { return this._getOnConnectionLost(); },\n        set onConnectionLost(newOnConnectionLost) { this._setOnConnectionLost(newOnConnectionLost); },\n\n        get onMessageDelivered() { return this._getOnMessageDelivered(); },\n        set onMessageDelivered(newOnMessageDelivered) { this._setOnMessageDelivered(newOnMessageDelivered); },\n        \n        get onMessageArrived() { return this._getOnMessageArrived(); },\n        set onMessageArrived(newOnMessageArrived) { this._setOnMessageArrived(newOnMessageArrived); }\n    };\n    \n    /** \n     * An application message, sent or received.\n     * <p>\n     * Other programming languages,\n     * <a href=\"/clients/java/doc/javadoc/com/ibm/micro/client/mqttv3/MqttMessage.html\"><big>Java</big></a>,\n     * <a href=\"/clients/c/doc/html/struct_m_q_t_t_client__message.html\"><big>C</big></a>.\n     * <p>\n     * All attributes may be null, which implies the default values.\n     * \n     * @name Messaging.Message\n     * @constructor\n     * @param {String|ArrayBuffer} payload The message data to be sent.\n     * <p>\n     * @property {string} payloadString <i>read only</i> The payload as a string if the payload consists of valid UTF-8 characters.\n     * @property {ArrayBuffer} payloadBytes <i>read only</i> The payload as an ArrayBuffer.\n     * <p>\n     * @property {string} destinationName <b>mandatory</b> The name of the destination to which the message is to be sent\n     *                    (for messages about to be sent) or the name of the destination from which the message has been received.\n     *                    (for messages received by the onMessage function).\n     * <p>\n     * @property {number} qos The Quality of Service used to deliver the message.\n     * <dl>\n     *     <dt>0 Best effort (default).\n     *     <dt>1 At least once.\n     *     <dt>2 Exactly once.     \n     * </dl>\n     * <p>\n     * @property {Boolean} retained If true, the message is to be retained by the server and delivered \n   \t *                     to both current and future subscriptions.\n   \t *                     If false the server only delivers the message to current subscribers, this is the default for new Messages. \n   \t *                     A received message has the retained boolean set to true if the message was published \n   \t *                     with the retained boolean set to true\n   \t *                     and the subscrption was made after the message has been published. \n   \t * <p>\n     * @property {Boolean} duplicate <i>read only</i> If true, this message might be a duplicate of one which has already been received. \n     *                     This is only set on messages received from the server.\n     *                     \n     */\n    var Message = function (newPayload) {  \n    \tvar payload;\n    \tif (   typeof newPayload === \"string\" \n    \t\t|| newPayload instanceof ArrayBuffer\n    \t\t|| newPayload instanceof Int8Array\n    \t\t|| newPayload instanceof Uint8Array\n    \t\t|| newPayload instanceof Int16Array\n    \t\t|| newPayload instanceof Uint16Array\n    \t\t|| newPayload instanceof Int32Array\n    \t\t|| newPayload instanceof Uint32Array\n    \t\t|| newPayload instanceof Float32Array\n    \t\t|| newPayload instanceof Float64Array\n    \t   ) {\n            payload = newPayload;\n        } else {\n            throw (format(ERROR.INVALID_ARGUMENT, [newPayload, \"newPayload\"]));\n        }\n\n    \tthis._getPayloadString = function () {\n    \t\tif (typeof payload === \"string\")\n       \t\t\treturn payload;\n       \t\telse\n       \t\t\treturn parseUTF8(payload, 0, payload.length); \n    \t};\n\n    \tthis._getPayloadBytes = function() {\n    \t\tif (typeof payload === \"string\") {\n    \t\t\tvar buffer = new ArrayBuffer(UTF8Length(payload));\n    \t\t\tvar byteStream = new Uint8Array(buffer); \n    \t\t\tstringToUTF8(payload, byteStream, 0);\n\n    \t\t\treturn byteStream;\n    \t\t} else {\n    \t\t\treturn payload;\n    \t\t};\n    \t};\n\n    \tvar destinationName = undefined;\n    \tthis._getDestinationName = function() { return destinationName; };\n    \tthis._setDestinationName = function(newDestinationName) { \n    \t\tif (typeof newDestinationName === \"string\")\n    \t\t    destinationName = newDestinationName;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newDestinationName, \"newDestinationName\"]));\n    \t};\n    \t    \t\n    \tvar qos = 0;\n    \tthis._getQos = function() { return qos; };\n    \tthis._setQos = function(newQos) { \n    \t\tif (newQos === 0 || newQos === 1 || newQos === 2 )\n    \t\t\tqos = newQos;\n    \t\telse \n    \t\t\tthrow new Error(\"Invalid argument:\"+newQos);\n    \t};\n\n    \tvar retained = false;\n    \tthis._getRetained = function() { return retained; };\n    \tthis._setRetained = function(newRetained) { \n    \t\tif (typeof newRetained === \"boolean\")\n    \t\t    retained = newRetained;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newRetained, \"newRetained\"]));\n    \t};\n    \t\n    \tvar duplicate = false;\n    \tthis._getDuplicate = function() { return duplicate; };\n    \tthis._setDuplicate = function(newDuplicate) { duplicate = newDuplicate; };\n    };\n    \n    Message.prototype = {\n    \tget payloadString() { return this._getPayloadString(); },\n    \tget payloadBytes() { return this._getPayloadBytes(); },\n    \t\n    \tget destinationName() { return this._getDestinationName(); },\n    \tset destinationName(newDestinationName) { this._setDestinationName(newDestinationName); },\n    \t\n    \tget qos() { return this._getQos(); },\n    \tset qos(newQos) { this._setQos(newQos); },\n\n    \tget retained() { return this._getRetained(); },\n    \tset retained(newRetained) { this._setRetained(newRetained); },\n\n    \tget duplicate() { return this._getDuplicate(); },\n    \tset duplicate(newDuplicate) { this._setDuplicate(newDuplicate); }\n    };\n       \n    // Module contents.\n    return {\n        Client: Client,\n        Message: Message\n    };\n})(window);"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/order.js",
    "content": "\n$(document).ready(function () {\n    $(\"#confirm-orders\").click(function () {\n        // alert(\"safd\");\n        var selectAddr =  $('input:radio[name=\"addressid\"]:checked').val();\n        if(selectAddr == null) {\n            swal(\"请先添加地址\");\n            return;\n        }\n        var isPay = $('#pay-select').val();\n        var oldPrice = $('#total-old').text();\n        var newPrice = $('#total-new').text();\n        $.ajax({\n            url: \"/shop/orderFinish\",\n            type: \"POST\",\n            data: {\n                oldPrice: oldPrice,\n                newPrice: newPrice,\n                isPay: isPay,\n                addressid: selectAddr\n            },\n            success: function () {\n                swal(\"购买成功\", \"\", \"success\");\n                location.href = \"/shop/info/list\"\n            },\n            error: function () {\n                swal(\"购买失败，无法连接到服务器！\");\n            }\n        });\n    });\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/send.js",
    "content": "var client;\nvar clientID;\n$(window).on('beforeunload', function () {\n    client = null;\n    window.opener.document.getElementById(\"flag\").value = \"0\";\n});\n$(document).ready(function () {\n\n    console.log(getChatList(2));\n    reGetChatUser($(\"#receiveId\").text());\n\n    clientID = $('#sendId').text();\n    client = new Messaging.Client('127.0.0.1', 61614, clientID);\n    client.onConnectionLost = function () {\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function (message) {\n        clientID = $('#sendId').text();\n        var userid = $(\"#receiveId\").text();\n        var msgObj = jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to === clientID && msgObj.from === userid) {\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n            /*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*/\n        } else if (msgObj.to === clientID && !getChatList(msgObj.from)) {\n            //重新获取聊天列表\n            reGetChatUser(msgObj.from);\n            // reGetChatUser(null);\n           /* var chatlistitem = '<a class=\"a-card\" data-userid=\"' + msgObj.from + '\"> <div class=\"card\">' + msgObj.from + '</div> </a>';\n            $('.a-far').prepend(chatlistitem);*/\n        }\n    };\n    //建立连接和订阅\n    client.connect({\n        onSuccess: function () {\n            //订阅topic\n            client.subscribe(\"topic\");\n            // alert(\"连接成功\");\n        }\n    });\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function () {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID = $('#sendId').text();\n            var msg = {};\n            msg.from = clientID;\n            msg.to = $('#receiveId').text();\n            msg.body = message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function (request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function (data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n            var receive = $(\"#receiveId\").text();\n            /*$.post(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             });\n             receive();\n             refreshList();*/\n            /*$.get(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             },\n             function(data,status){\n             alert(\"数据: \\n\" + data + \"\\n状态: \" + status);\n             });*/\n        }\n    });\n\n    //回车\n    $(document).keypress(function (e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function () {\n        $('.a-card').css(\"background\", \"#FFFFFF\")\n        $(this).css(\"background\", \"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function (request) {\n                alert(\"保存消息失败\");\n            },\n            success: function (result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n    /*function hitList(){\n     $('.list-item').css(\"background\",\"#FAFAFA\");\n     $(this).css(\"background\",\"#EBEBEC\");\n     var name = $(this).children(\"#user-name\").text();\n     var number = $(this).children(\"#user-no\").text();\n     $(\"#receive\").text(name);\n     $(\"#receiveId\").text(number);\n\n     }*/\n\n    $('.chat-list').hover(function () {\n        $(this).css(\"overflow-y\", \"auto\");\n    }, function () {\n        $(this).css(\"overflow-y\", \"hidden\");\n    });\n    //refreshList();\n\n});\n\nfunction userListClick() {\n\n    //发异步请求查聊天消息\n    $.ajax({\n        url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            senduser: $(\"#sendId\").text(),\n            receiveuser: $(\"#receiveId\").text(),\n        },\n        error: function (request) {\n            alert(\"保存消息失败\");\n        },\n        success: function (result) {\n            $('.chat-content-body').empty();\n            showMessage(result.info.message);\n            // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n        }\n    });\n}\n\n/*function receive(){\n var sendUser = $('#receiveId').text();\n $.post(\"servlet/ReceiveServlet\", {\n sendId: sendUser,\n },\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n $(\".chat-content-body\").html('');\n for (var i = 0; i < data.length; i++) {\n showMessage(data[i].User1,data[i].MsgContent);\n }\n },\"json\");\n }*/\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index, item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n//获取所有聊天列表\nfunction getChatList(id) {\n    var chatList = [];\n    $('.a-far>a').each(function () {\n        chatList.push($(this).attr(\"data-userid\"));\n    });\n    console.log(chatList);\n    for (var i = 0; i < chatList.length; i++) {\n        if (chatList[i] == id) {\n            return true;\n        }\n    }\n    return false;\n\n    /*$('.a-far').children().each(function(index,item){\n     alert(item.attr(\"data-userid\"));\n     })*/\n\n}\n\n//重新获取列表\nfunction reGetChatUser(sendto) {\n    $.ajax({\n        url: \"/shop/chatto/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            sendto: sendto\n        },\n        error: function (request) {\n            alert(result.msg);\n        },\n        success: function (result) {\n            $('.a-far').empty();\n            showChatList(result.info.userlist);\n        }\n    });\n}\n\nfunction showChatList(userlist) {\n    $.each(userlist, function (index, item) {\n        var chatlistitemA = $(\"<a></a>\").addClass(\"a-card\").attr(\"data-userid\", item.userid).attr(\"data-username\", item.username);\n        var chatlistitem = chatlistitemA.addClass(\"card\").append(item.username);\n        chatlistitemA.click(function () {\n            $('.a-card').css(\"background\", \"#FFFFFF\")\n            $(this).css(\"background\", \"#F8F8F8\");\n            var userid = $(this).attr(\"data-userid\");\n            // var username = $(this).children(\".card\").text();\n            var username = $(this).attr(\"data-username\");\n            $(\"#receive\").text(username);\n            $(\"#receiveId\").text(userid);\n            userListClick();\n        });\n\n        /* <div class=\"card\">' + item.username + '</div>\n        *!/*/\n        $('.a-far').prepend(chatlistitem);\n    });\n}\n\n\n/*\n function refreshList() {\n $.post(\"servlet/RefreshServlet\",\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n //$(\".chat-list\").html('');\n for (var i = 0; i < data.length; i++) {\n // showList(data[i].UserId,data[i].Name);\n $('#list-item'+i).children(\"#user-name\").text(data[i].Name);\n $('#list-item'+i).children(\"#user-no\").text(data[i].UserId);\n $('#list-item'+i).css(\"display\",\"block\");\n }\n },\"json\");\n }\n\n function showList(id,name) {\n var item = '<div class=\"list-item\"><h3 id=\"user-name\">'+name+'</h3><span id=\"user-no\">'+id+'</span></div>';\n $('.chat-list').append(item);\n }*/\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/shopcart.js",
    "content": "/*\n$(document).ready(function(){\n\t$('.delete-goods').click(function(){\n\t\tvar goodsid = $(this).attr(\"data-goodsid\");\n        alert(\"asfd\");\n\t\t// deleteGoods(goodsid);\n\t});\n\n\t$('.confirm-orders').click(function(){\n\t\tconfirmOrders();\n\t\talert(\"已成功加入订单，并已发送邮件至卖家，请等待卖家回复！\");\n\t\tlocation.href = \"/index.jsp\";\n\t});\n});*/\n/*\nfunction deleteGoods(goodsid){\n\t$.post(\"servlet/DeleteCartServlet\", { \n\t\tgoodsId: goodsid,\n\t});\n}\n\nfunction confirmOrders(){\n\t$.post(\"servlet/SaleServlet\");\n}*/\n$(document).ready(function () {\n    var path = $(\"#path\").text();\n    showcart();\n\n    /*$('.delete-goods').click(function(){\n        alert(\"adf\");\n        var goodsid = $(this).attr(\"data-goodsid\");\n        $.ajax({\n            url: \"/shop/deleteCart\" + goodsid,\n            type: \"DELETE\",\n            success:function (result) {\n                swal(result.msg, \"\",\"success\");\n                showcart();\n            },\n            error:function () {\n                /!*to_page('/shop',currentPage);*!/\n                swal(\"删除失败\");\n            }\n        })\n    });*/\n});\n\n/*$(document).on(\"click\",\".delete-good\",function () {\n    alert(\"afd\");\n});*/\n\nfunction deleteCartGoods(goodsid) {\n    $.ajax({\n        url: \"/shop/deleteCart/\" + goodsid,\n        type: \"DELETE\",\n        success: function (result) {\n            // swal(result.msg, \"\",\"success\");\n            showcart();\n        },\n        error:function () {\n            swal(\"删除失败\");\n        }\n    })\n}\n\n//改变商品数量更新购物车\nfunction updateCart(goodsid, newNum) {\n    //获取当前数量\n    // var newNum = $(\".num\").val();\n    $.ajax({\n        url: \"/shop/update\",\n        data: {\n            goodsid: goodsid,\n            num:newNum\n        },\n        method: \"post\",\n        success: function (result) {\n            // swal(result.msg, \"\", \"success\");\n            showcart();\n        },\n        error: function (result) {\n            swal(\"更新购物车失败\");\n        }\n    });\n}\n\nfunction showcart() {\n    $.ajax({\n        url: \"/shop\" + \"/cartjson\",\n        type: \"post\",\n        success: function (result) {\n            //显示购物车\n            build_cart_table(result);\n        },\n        error: function (result) {\n            swal(\"获取购物车失败\");\n        }\n    });\n}\n\nfunction build_cart_table(result) {\n    $(\"#cart-table tbody\").empty();\n    var goods = result.info.shopcart;\n    var totalnum = 0;\n    var totalMoney = 0;\n\n    if(goods.length === 0) {\n        var spareTd = $('<tr> <td colspan=\"6\"> <div class=\"coupon\" style=\"margin-left:37%;\">购物车还是空的，快去<a href=\"/shop/main\" style=\"color:red;\">首页</a>看看吧！ </div> </td> </tr>');\n        spareTd.appendTo(\"#cart-table tbody\");\n    } else {\n        $.each(goods, function (index,item) {\n\n            var delA = $(\"<a></a>\").addClass(\"delete-goods\").attr(\"data-goodsid\",item.goodsid).append(\"×\");\n\n            var deleteCart = $(\"<td></td>\").addClass(\"product-remove product-remove_2\")\n                .append(delA);\n\n            delA.click(function () {\n                deleteCartGoods(item.goodsid);\n            });\n\n            var shopimage = $(\"<td></td>\").addClass(\"product-thumbnail product-thumbnail-2\")\n                .append($(\"<a></a>\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid)\n                    .append($(\"<img/>\").attr(\"src\",\"/shop/pictures/\"+item.imagePaths[0].path)));\n\n            var goodsname = $(\"<td></td>\").addClass(\"product-name product-name_2\")\n                .append($(\"<a></a>\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid).append(item.goodsname));\n\n            var goodsprice = $(\"<td></td>\").addClass(\"product-price\")\n                .append($(\"<span></span>\").addClass(\"amount-list amount-list-2\").append(\"￥\"+item.price));\n\n            var numIput = $(\"<input/>\").addClass(\"num\").attr(\"type\",\"number\").attr(\"value\",item.num);\n\n            var num = $(\"<td></td>\").addClass(\"product-stock-status\")\n                .append($(\"<div></div>\").addClass(\"latest_es_from_2\")\n                    .append(numIput));\n\n            numIput.change(function () {\n               updateCart(item.goodsid,$(this).val());\n            });\n\n            var totalPrice = $(\"<td></td>\").addClass(\"product-price\")\n                .append($(\"<span></span>\").addClass(\"amount-list amount-list-2\").append(\"￥\"+item.price*item.num));\n\n            var goodsitem = $(\"<tr></tr>\").append(deleteCart)\n                .append(shopimage)\n                .append(goodsname)\n                .append(goodsprice)\n                .append(num)\n                .append(totalPrice)\n                .appendTo(\"#cart-table tbody\");\n            totalnum++;\n            totalMoney = totalMoney + item.price*item.num;\n        });\n    }\n\n    //小计\n    $(\"#total-num\").text(totalnum);\n    $(\"#total-price\").text(\"￥\"+totalMoney);\n}\n"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/sort.js",
    "content": "$(document).ready(function(){\n    // $(\".data-item-li\").children(\"div\").addClass(\"to-big\");\n\t//分类栏隐藏显示\n\t$(\".list-group-item\").hover(function(){\n\t\t$(this).children(\"div.sort-detail\").show();\n\t},function(){\n\t\t$(this).children(\"div.sort-detail\").delay(1).hide(0);\n\t\t// $(this).children(\"div.sort-detail\").hide(10);\n\t});\n\n\t//幻灯片左右控制器\n\t$(\"#mycarousel\").hover(function(){\n\t\t$(this).children(\".carousel-control\").show();\n\t},function(){\n\t\t$(this).children(\".carousel-control\").hide();\n\t});\n\n\t//收藏按钮\n\t$(\".data-item-li\").hover(function(){\n\t\t//需处理显示哪个按钮\n\t\t// $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n\t\t$(this).find(\".like-button\").show();\n\t},function(){\n\t\t$(this).find(\".like-button\").hide();\n\t});\n\t\n\t$(\".info-a\").hover(function(){\n\t\t//需处理显示哪个按钮\n\t\t// $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n\t\t$(this).find(\".dropdown-menu\").show();\n\t},function(){\n\t\t$(this).find(\".dropdown-menu\").hide();\n\t});\n\n\t$('.like-button').click(function(){\n\t\t//$(this).removeClass(\"glyphicon-heart-empty\");\n        var goodsId = $(this).attr('data-id');\n        var isChangeBtn = true;\n        if(!$(this).hasClass('glyphicon-heart')) {\n            //收藏\n            $.ajax({\n                url:\"/shop/collect\",\n                type:\"POST\",\n                data:{\n                    goodsid:goodsId\n                },\n                success:function (result) {\n                    //收藏成功\n                    if(result.code === 200){\n                        location.href = \"/shop/login\";\n                        isChangeBtn = false;\n                    }\n                },\n                error:function () {\n                    alert(\"收藏失败\");\n                }\n            })\n        } else {\n            //取消收藏\n            $.ajax({\n                url:\"/shop/deleteCollect\",\n                type:\"POST\",\n                data:{\n                    goodsid:goodsId\n                },\n                success:function (result) {\n                    //取消收藏成功\n                    if(result.code === 200){\n                        location.href = \"/shop/login\";\n                        isChangeBtn = false;\n                    }\n                },\n                error:function () {\n                    alert(\"取消收藏失败\");\n                }\n            })\n        }\n\n\t\t/*$.post(\"servlet/CollectServlet\", {\n\t\t\tgoodsId: goodsId,\n\t\t\t});\n\t\t// alert(\"商品已加入购物车！\");*/\n\n\t\tif(isChangeBtn) {\n            $(this).toggleClass(\"glyphicon-heart glyphicon-heart-empty\");\n        }\n\t});\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/templatemo-script.js",
    "content": "/*\n *\twww.templatemo.com\n *******************************************************/\n\n/* HTML document is loaded. DOM is ready. \n-----------------------------------------*/\n$(document).ready(function(){\n\n\t/* Mobile menu */\n\t$('.mobile-menu-icon').click(function(){\n\t\t$('.templatemo-left-nav').slideToggle();\t\t\t\t\n\t});\n\n\t/* Close the widget when clicked on close button */\n\t$('.templatemo-content-widget .fa-times').click(function(){\n\t\t$(this).parent().slideUp(function(){\n\t\t\t$(this).hide();\n\t\t});\n\t});\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/userManage.js",
    "content": "\n$(document).ready(function () {\n\n    var path = $(\"#path\").text();\n\n    var currentPage = 1;\n\n    to_page(path, 1);\n\n\n});\n\n$(document).on(\"click\",\".templatemo-delete-btn\",function () {\n    var goodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    swal({\n            title: \"确定删除\" + goodsname + \"吗？\",\n            type: \"warning\",\n            showCancelButton: true,\n            cancelButtonText:\"取消\",\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"确定删除！\",\n            closeOnConfirm: false,\n        },\n        function () {\n            /*swal(\"删除！\", \"你的虚拟文件已经被删除。\", \"success\");*/\n            $.ajax({\n                url: \"/shop/admin/user/delete/\" + goodsid,\n                type: \"DELETE\",\n                success:function (result) {\n                    swal(result.msg, \"\",\"success\");\n                    to_page('/shop',currentPage);\n                },\n                error:function () {\n                    /*to_page('/shop',currentPage);*/\n                }\n            });\n        });\n});\n\nfunction to_page(path, page) {\n    $.ajax({\n        url: path + \"/admin/user/showjson\",\n        data: \"page=\" + page,\n        type: \"get\",\n        success: function (result) {\n\n            //解析显示\n            build_user_table(path, result);\n\n            //页面信息\n            build_page_info(path, result);\n\n            //分页\n            build_page_nav(path, result);\n\n            currentPage = page;\n        }\n    });\n}\n\nfunction build_user_table(path,result) {\n    $(\"#goodsinfo tbody\").empty();\n    var goods = result.info.pageInfo.list;\n    $.each(goods, function (index,item) {\n        var userid = $(\"<td></td>\").append(item.userid);\n        var username = $(\"<td></td>\").append(item.username);\n        var email = $(\"<td></td>\").append(item.email);\n        var telephone = $(\"<td></td>\").append(item.telephone);\n\n        var deleteBtn = $(\"<button></button>\").addClass(\"templatemo-delete-btn\").append(\"删除\");\n\n        var deleteTd = $(\"<td></td>\").append(deleteBtn);\n\n\n        $(\"<tr></tr>\").append(userid)\n            .append(username)\n            .append(email)\n            .append(telephone)\n            .append(deleteTd).appendTo(\"#goodsinfo tbody\");\n    })\n}\n\nfunction build_page_info(path,result) {\n    $(\"#page-info-area\").empty();\n    $(\"#page-info-area\").append(\"当前第\"+ result.info.pageInfo.pageNum +\"页，总共\"+ result.info.pageInfo.pages +\"页，总共\"+ result.info.pageInfo.total +\"记录\")\n}\n\nfunction build_page_nav(path,result) {\n    $(\"#page-div-nav ul\").empty();\n    var pageUl = $(\"<ul></ul>\").addClass(\"pagination\")\n\n    var firstPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"首页\")));\n\n    var prePage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-backward\\\"></i></span>\")));\n\n    if(!result.info.pageInfo.hasPreviousPage) {\n        prePage.addClass(\"li-none\");\n    } else {\n        prePage.click(function () {\n            to_page('/shop',result.info.pageInfo.prePage);\n        });\n    }\n\n    //跳转\n    firstPage.click(function () {\n        to_page('/shop',1);\n    });\n\n    var nextPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-forward\\\"></i></span>\")));\n\n    var lastPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"末页\")));\n\n    if(!result.info.pageInfo.hasNextPage) {\n        nextPage.addClass(\"li-none\");\n    } else {\n        nextPage.click(function () {\n            to_page('/shop',result.info.pageInfo.nextPage);\n        });\n    }\n\n    lastPage.click(function () {\n        to_page('/shop',result.info.pageInfo.lastPage);\n    });\n\n    pageUl.append(firstPage).append(prePage);\n\n    $.each(result.info.pageInfo.navigatepageNums,function (index,item) {\n        var numLi = $(\"<li></li>\").append($(\"<a></a>\")\n            .append($(\"<span aria-hidden=\\\"true\\\"></span>\").append(item)));\n        if(result.info.pageInfo.pageNum === item) {\n            numLi.addClass(\"active\");\n        }\n        numLi.click(function () {\n            to_page('/shop',item);\n        });\n        pageUl.append(numLi);\n    });\n\n    pageUl.append(nextPage).append(lastPage).appendTo(\"#page-div-nav\");\n}"
  },
  {
    "path": "SpringbootSchoolShop/src/main/webapp/js/validate.js",
    "content": "\n$.validator.setDefaults({\n\tsubmitHandler: function() {\n\t\tform.submit();\n\t}\n});\n$(document).ready(function() {\n\t$('#form').validate({\n\t\trules: {\n\t\t\tusername: \"required\",\n            telephone: {\n\t\t\t\trequired: true,\n\t\t\t},\n            email: {\n\t\t\t\trequired: true,\n\t\t\t\temail: true,\n\t\t\t},\n            password: {\n\t\t\t\trequired: true,\n\t\t\t\tminlength: 8,\n\t\t\t},\n\t\t\tconfirmPassword: {\n\t\t\t\trequired: true,\n\t\t\t\tminlength: 8,\n\t\t\t\tequalTo: \"#password\",\n\t\t\t}\n\t\t},\n\t\tmessages: {\n            username: \"用户名不能为空\",\n            telephone: \"联系电话不能为空\",\n            email: {\n\t\t\t\trequired: \"邮箱输入不能为空\",\n\t\t\t\temail: \"请输入一个正确的邮箱\",\n\t\t\t},\n            password: {\n\t\t\t\trequired: \"密码输入不能为空\",\n\t\t\t\tminlength: \"密码长度不能小于8位\",\n\t\t\t},\n\t\t\tconfirmPassword: {\n\t\t\t\trequired: \"输入不能为空\",\n\t\t\t\tminlength: \"密码长度不能小于8位\",\n\t\t\t\tequalTo: \"两次密码输入不一致\",\n\t\t\t}\n\t\t}\n\t});\n});"
  },
  {
    "path": "SpringbootSchoolShop/src/test/java/com/zhang/ssmschoolshop/SpringbootSchoolShopApplicationApplicationTests.java",
    "content": "package com.zhang.ssmschoolshop;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class SpringbootSchoolShopApplicationApplicationTests {\n\n    @Test\n    public void contextLoads() {\n    }\n\n}\n"
  },
  {
    "path": "db_springbootshopmaster.sql",
    "content": "/*\r\nNavicat MySQL Data Transfer\r\n\r\nSource Server         : 127.0.0.1\r\nSource Server Version : 80019\r\nSource Host           : localhost:3306\r\nSource Database       : db_shopmaster\r\n\r\nTarget Server Type    : MYSQL\r\nTarget Server Version : 80019\r\nFile Encoding         : 65001\r\n\r\nDate: 2021-07-24 17:18:18\r\n*/\r\n\r\nSET FOREIGN_KEY_CHECKS=0;\r\n\r\n-- ----------------------------\r\n-- Table structure for activity\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `activity`;\r\nCREATE TABLE `activity` (\r\n  `activityId` int NOT NULL AUTO_INCREMENT,\r\n  `activityName` varchar(50) NOT NULL,\r\n  `activityDes` varchar(500) NOT NULL,\r\n  `discount` float DEFAULT '1',\r\n  `fullPrice` int DEFAULT NULL,\r\n  `reducePrice` int DEFAULT NULL,\r\n  `fullNum` int DEFAULT NULL,\r\n  `reduceNum` int DEFAULT NULL,\r\n  PRIMARY KEY (`activityId`)\r\n) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of activity\r\n-- ----------------------------\r\nINSERT INTO `activity` VALUES ('1', '测试活动', '1231', '1', '123', '123', '1231', '12');\r\nINSERT INTO `activity` VALUES ('2', '开业大酬宾', '开业大酬宾，全场9折。', '9.2', '100', '8', '200', '20');\r\n\r\n-- ----------------------------\r\n-- Table structure for address\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `address`;\r\nCREATE TABLE `address` (\r\n  `addressID` int NOT NULL AUTO_INCREMENT,\r\n  `userId` int NOT NULL,\r\n  `province` varchar(50) NOT NULL,\r\n  `city` varchar(50) NOT NULL,\r\n  `county` varchar(50) NOT NULL,\r\n  `detailAddr` varchar(50) NOT NULL,\r\n  `conName` varchar(50) NOT NULL,\r\n  `conTel` varchar(50) NOT NULL,\r\n  PRIMARY KEY (`addressID`),\r\n  KEY `addressID` (`addressID`),\r\n  KEY `userId` (`userId`),\r\n  CONSTRAINT `address_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of address\r\n-- ----------------------------\r\nINSERT INTO `address` VALUES ('7', '1', '北京市', '北京市市辖区', '东城区', '12312', '123123', '2131231321');\r\nINSERT INTO `address` VALUES ('8', '3', '湖南省', '长沙市', '雨花区', '长沙理工大学', '张鑫', '18229189406');\r\n\r\n-- ----------------------------\r\n-- Table structure for admin\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `admin`;\r\nCREATE TABLE `admin` (\r\n  `adminId` int NOT NULL AUTO_INCREMENT,\r\n  `adminName` varchar(50) NOT NULL,\r\n  `password` varchar(50) NOT NULL,\r\n  PRIMARY KEY (`adminId`)\r\n) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of admin\r\n-- ----------------------------\r\nINSERT INTO `admin` VALUES ('1', 'admin', '25d55ad283aa400af464c76d713c07ad');\r\n\r\n-- ----------------------------\r\n-- Table structure for category\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `category`;\r\nCREATE TABLE `category` (\r\n  `cateId` int NOT NULL AUTO_INCREMENT,\r\n  `cateName` varchar(50) NOT NULL,\r\n  PRIMARY KEY (`cateId`)\r\n) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of category\r\n-- ----------------------------\r\nINSERT INTO `category` VALUES ('1', '数码');\r\nINSERT INTO `category` VALUES ('2', '服饰');\r\nINSERT INTO `category` VALUES ('3', '家电');\r\nINSERT INTO `category` VALUES ('4', '书籍');\r\nINSERT INTO `category` VALUES ('5', '其他');\r\n\r\n-- ----------------------------\r\n-- Table structure for collection\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `collection`;\r\nCREATE TABLE `collection` (\r\n  `userId` int NOT NULL,\r\n  `goodsId` int NOT NULL,\r\n  `collectTime` datetime NOT NULL,\r\n  PRIMARY KEY (`userId`,`goodsId`),\r\n  KEY `collection_ibfk_2` (`goodsId`),\r\n  CONSTRAINT `collection_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE,\r\n  CONSTRAINT `collection_ibfk_2` FOREIGN KEY (`goodsId`) REFERENCES `goods` (`goodsId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of collection\r\n-- ----------------------------\r\nINSERT INTO `collection` VALUES ('3', '93', '2019-05-13 10:47:26');\r\nINSERT INTO `collection` VALUES ('3', '94', '2019-05-13 10:16:11');\r\nINSERT INTO `collection` VALUES ('3', '95', '2019-05-13 10:37:35');\r\nINSERT INTO `collection` VALUES ('3', '97', '2019-05-13 10:23:11');\r\n\r\n-- ----------------------------\r\n-- Table structure for comment\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `comment`;\r\nCREATE TABLE `comment` (\r\n  `commentId` int NOT NULL AUTO_INCREMENT,\r\n  `userId` int NOT NULL,\r\n  `goodsId` int NOT NULL,\r\n  `point` int NOT NULL,\r\n  `content` varchar(255) NOT NULL,\r\n  `commentTime` datetime NOT NULL,\r\n  PRIMARY KEY (`commentId`),\r\n  KEY `userId` (`userId`),\r\n  KEY `goodsId` (`goodsId`),\r\n  CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE,\r\n  CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`goodsId`) REFERENCES `goods` (`goodsId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of comment\r\n-- ----------------------------\r\nINSERT INTO `comment` VALUES ('2', '3', '93', '4', '商品特别好，我非常喜欢', '2019-05-13 10:48:51');\r\n\r\n-- ----------------------------\r\n-- Table structure for deliver\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `deliver`;\r\nCREATE TABLE `deliver` (\r\n  `deliverId` int NOT NULL AUTO_INCREMENT,\r\n  `orderId` int NOT NULL,\r\n  `sendId` int NOT NULL,\r\n  PRIMARY KEY (`deliverId`),\r\n  KEY `orderId` (`orderId`),\r\n  CONSTRAINT `deliver_ibfk_1` FOREIGN KEY (`orderId`) REFERENCES `indent` (`orderId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of deliver\r\n-- ----------------------------\r\n\r\n-- ----------------------------\r\n-- Table structure for goods\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `goods`;\r\nCREATE TABLE `goods` (\r\n  `goodsId` int NOT NULL AUTO_INCREMENT,\r\n  `goodsName` varchar(50) NOT NULL,\r\n  `price` int NOT NULL,\r\n  `num` int NOT NULL,\r\n  `upTime` datetime NOT NULL,\r\n  `category` int NOT NULL,\r\n  `detailCate` varchar(50) NOT NULL,\r\n  `description` text NOT NULL,\r\n  `activityId` int NOT NULL DEFAULT '1',\r\n  PRIMARY KEY (`goodsId`),\r\n  KEY `activityId` (`activityId`),\r\n  KEY `category` (`category`),\r\n  CONSTRAINT `goods_ibfk_1` FOREIGN KEY (`activityId`) REFERENCES `activity` (`activityId`) ON DELETE CASCADE ON UPDATE CASCADE,\r\n  CONSTRAINT `goods_ibfk_2` FOREIGN KEY (`category`) REFERENCES `category` (`cateId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of goods\r\n-- ----------------------------\r\nINSERT INTO `goods` VALUES ('93', '测试商品1', '10', '29', '2019-05-10 19:43:04', '1', '测试', '这是测试商品1', '1');\r\nINSERT INTO `goods` VALUES ('94', '测试商品2', '23', '34', '2019-05-10 19:44:28', '2', '测试', '这是测试商品2', '1');\r\nINSERT INTO `goods` VALUES ('95', '这是测试商品', '123', '1231', '2019-05-11 11:41:24', '1', '测试', '测试商品', '1');\r\nINSERT INTO `goods` VALUES ('96', '测试商品4', '213', '222', '2019-05-11 11:42:00', '1', '12321', '这是一个测试商品4', '1');\r\nINSERT INTO `goods` VALUES ('97', '测试商品5', '213', '212', '2019-05-13 10:22:58', '1', '测试', '这是测试商品', '1');\r\nINSERT INTO `goods` VALUES ('98', 'test商品1', '10', '100', '2021-07-24 11:50:07', '1', '测试', '测试商品', '1');\r\nINSERT INTO `goods` VALUES ('99', '1231', '1231', '1231', '2021-07-24 11:51:20', '1', '1231231', '1231', '1');\r\n\r\n-- ----------------------------\r\n-- Table structure for imagepath\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `imagepath`;\r\nCREATE TABLE `imagepath` (\r\n  `pathId` int NOT NULL AUTO_INCREMENT,\r\n  `goodId` int NOT NULL,\r\n  `path` varchar(255) NOT NULL,\r\n  PRIMARY KEY (`pathId`),\r\n  KEY `goodid` (`goodId`),\r\n  CONSTRAINT `imagepath_ibfk_1` FOREIGN KEY (`goodId`) REFERENCES `goods` (`goodsId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB AUTO_INCREMENT=131 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of imagepath\r\n-- ----------------------------\r\nINSERT INTO `imagepath` VALUES ('114', '93', '3a25测试商品1新公司录用offer.png');\r\nINSERT INTO `imagepath` VALUES ('115', '93', '6a7b测试商品1原公司解约通知.png');\r\nINSERT INTO `imagepath` VALUES ('116', '94', 'c1a9测试商品2user3.png');\r\nINSERT INTO `imagepath` VALUES ('117', '95', 'bd30这是测试商品QQ浏览器截图20181120200039.png');\r\nINSERT INTO `imagepath` VALUES ('118', '96', '94e9123QQ浏览器截图20180925163930.png');\r\nINSERT INTO `imagepath` VALUES ('119', '96', '7c68123QQ浏览器截图20181120200033.png');\r\nINSERT INTO `imagepath` VALUES ('120', '96', '669e123QQ浏览器截图20181120200038.png');\r\nINSERT INTO `imagepath` VALUES ('121', '97', 'c2e5测试商品5QQ浏览器截图20180628082816.png');\r\nINSERT INTO `imagepath` VALUES ('122', '97', '61dd测试商品5QQ浏览器截图20180910091336.png');\r\nINSERT INTO `imagepath` VALUES ('123', '97', '0f0b测试商品5QQ浏览器截图20180917082049.png');\r\nINSERT INTO `imagepath` VALUES ('124', '97', '8020测试商品5QQ浏览器截图20180925163930.png');\r\nINSERT INTO `imagepath` VALUES ('125', '97', 'd8f2测试商品5QQ浏览器截图20181120200033.png');\r\nINSERT INTO `imagepath` VALUES ('126', '97', '776b测试商品5QQ浏览器截图20181120200038.png');\r\nINSERT INTO `imagepath` VALUES ('127', '97', '65be测试商品5QQ浏览器截图20181120200039.png');\r\nINSERT INTO `imagepath` VALUES ('128', '97', 'c2a3测试商品5QQ浏览器截图20190307101645.png');\r\nINSERT INTO `imagepath` VALUES ('129', '98', 'a0a9test商品1复制算法.png');\r\nINSERT INTO `imagepath` VALUES ('130', '99', 'false');\r\n\r\n-- ----------------------------\r\n-- Table structure for indent\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `indent`;\r\nCREATE TABLE `indent` (\r\n  `orderId` int NOT NULL AUTO_INCREMENT,\r\n  `userId` int NOT NULL,\r\n  `orderTime` datetime NOT NULL,\r\n  `oldPrice` float NOT NULL,\r\n  `newPrice` float NOT NULL,\r\n  `isPay` tinyint(1) NOT NULL,\r\n  `isSend` tinyint(1) NOT NULL,\r\n  `isReceive` tinyint(1) NOT NULL,\r\n  `isComplete` tinyint(1) NOT NULL,\r\n  `addressId` int NOT NULL,\r\n  PRIMARY KEY (`orderId`),\r\n  KEY `userId` (`userId`),\r\n  KEY `orderGoods` (`orderTime`),\r\n  KEY `addressId` (`addressId`),\r\n  CONSTRAINT `indent_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE,\r\n  CONSTRAINT `indent_ibfk_2` FOREIGN KEY (`addressId`) REFERENCES `address` (`addressID`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of indent\r\n-- ----------------------------\r\nINSERT INTO `indent` VALUES ('28', '3', '2019-05-11 11:33:10', '10', '10', '1', '1', '1', '1', '8');\r\nINSERT INTO `indent` VALUES ('29', '3', '2019-05-11 11:39:39', '125', '125', '1', '1', '1', '1', '8');\r\nINSERT INTO `indent` VALUES ('30', '3', '2019-05-13 10:16:19', '109', '109', '1', '1', '1', '1', '8');\r\nINSERT INTO `indent` VALUES ('31', '3', '2019-05-13 10:37:59', '10', '10', '0', '1', '1', '1', '8');\r\nINSERT INTO `indent` VALUES ('32', '3', '2019-05-13 10:43:05', '10', '10', '1', '1', '0', '0', '8');\r\nINSERT INTO `indent` VALUES ('33', '3', '2019-05-13 10:47:42', '40', '40', '1', '1', '1', '1', '8');\r\nINSERT INTO `indent` VALUES ('34', '3', '2021-07-24 12:02:01', '40', '40', '1', '1', '0', '0', '8');\r\n\r\n-- ----------------------------\r\n-- Table structure for orderitem\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `orderitem`;\r\nCREATE TABLE `orderitem` (\r\n  `itemId` int NOT NULL AUTO_INCREMENT,\r\n  `orderId` int NOT NULL,\r\n  `goodsId` int NOT NULL,\r\n  `num` int NOT NULL,\r\n  PRIMARY KEY (`itemId`),\r\n  KEY `orderId` (`orderId`),\r\n  KEY `goodsId` (`goodsId`),\r\n  CONSTRAINT `orderitem_ibfk_1` FOREIGN KEY (`orderId`) REFERENCES `indent` (`orderId`) ON DELETE CASCADE ON UPDATE CASCADE,\r\n  CONSTRAINT `orderitem_ibfk_2` FOREIGN KEY (`goodsId`) REFERENCES `goods` (`goodsId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of orderitem\r\n-- ----------------------------\r\nINSERT INTO `orderitem` VALUES ('14', '28', '93', '1');\r\nINSERT INTO `orderitem` VALUES ('15', '29', '93', '1');\r\nINSERT INTO `orderitem` VALUES ('16', '29', '94', '5');\r\nINSERT INTO `orderitem` VALUES ('17', '30', '93', '4');\r\nINSERT INTO `orderitem` VALUES ('18', '30', '94', '3');\r\nINSERT INTO `orderitem` VALUES ('19', '31', '93', '1');\r\nINSERT INTO `orderitem` VALUES ('20', '32', '93', '1');\r\nINSERT INTO `orderitem` VALUES ('21', '33', '93', '4');\r\nINSERT INTO `orderitem` VALUES ('22', '34', '98', '4');\r\n\r\n-- ----------------------------\r\n-- Table structure for shopcart\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `shopcart`;\r\nCREATE TABLE `shopcart` (\r\n  `userId` int NOT NULL,\r\n  `goodsid` int NOT NULL,\r\n  `cateDate` datetime NOT NULL,\r\n  `goodsNum` int NOT NULL,\r\n  PRIMARY KEY (`userId`,`goodsid`),\r\n  KEY `userId` (`userId`),\r\n  KEY `goodsid` (`goodsid`),\r\n  CONSTRAINT `shopcart_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE,\r\n  CONSTRAINT `shopcart_ibfk_2` FOREIGN KEY (`goodsid`) REFERENCES `goods` (`goodsId`) ON DELETE CASCADE ON UPDATE CASCADE\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of shopcart\r\n-- ----------------------------\r\n\r\n-- ----------------------------\r\n-- Table structure for user\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `user`;\r\nCREATE TABLE `user` (\r\n  `userId` int NOT NULL AUTO_INCREMENT,\r\n  `username` varchar(50) NOT NULL,\r\n  `password` varchar(50) NOT NULL,\r\n  `regTime` datetime NOT NULL,\r\n  `email` varchar(50) NOT NULL,\r\n  `telephone` varchar(50) NOT NULL,\r\n  PRIMARY KEY (`userId`),\r\n  KEY `userId` (`userId`)\r\n) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;\r\n\r\n-- ----------------------------\r\n-- Records of user\r\n-- ----------------------------\r\nINSERT INTO `user` VALUES ('1', 'root', '25d55ad283aa400af464c76d713c07ad', '2019-04-18 17:16:34', '916877983@qq.com', '18229819406');\r\nINSERT INTO `user` VALUES ('2', 'codingzx', '25d55ad283aa400af464c76d713c07ad', '2019-04-22 15:29:12', '994683607@qq.com', '18229819406');\r\nINSERT INTO `user` VALUES ('3', 'admin', '25d55ad283aa400af464c76d713c07ad', '2019-05-16 10:46:46', '123123', '1231321');\r\nSET FOREIGN_KEY_CHECKS=1;\r\n"
  },
  {
    "path": "ssmschoolshop/.idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <annotationProcessing>\n      <profile name=\"Maven default annotation processors profile\" enabled=\"true\">\n        <sourceOutputDir name=\"target/generated-sources/annotations\" />\n        <sourceTestOutputDir name=\"target/generated-test-sources/test-annotations\" />\n        <outputRelativeToContentRoot value=\"true\" />\n        <module name=\"ssmschoolshop\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": "ssmschoolshop/.idea/dataSources/2c2b7821-8da1-495a-884a-0b2c51399650.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<dataSource name=\"db_shopmaster@localhost\">\n  <database-model serializer=\"dbm\" rdbms=\"MYSQL\" format-version=\"4.9\">\n    <root id=\"1\">\n      <ServerVersion>5.7.20</ServerVersion>\n      <DefaultEngine>InnoDB</DefaultEngine>\n      <DefaultTmpEngine>InnoDB</DefaultTmpEngine>\n      <DefaultCasing>lower/lower</DefaultCasing>\n    </root>\n    <schema id=\"2\" parent=\"1\" name=\"base\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"3\" parent=\"1\" name=\"db_biyesheji\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"4\" parent=\"1\" name=\"db_bootblog\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"5\" parent=\"1\" name=\"db_huodongchat\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"6\" parent=\"1\" name=\"db_imoocshop\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"7\" parent=\"1\" name=\"db_iotmanage\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"8\" parent=\"1\" name=\"db_mall\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"9\" parent=\"1\" name=\"db_message\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"10\" parent=\"1\" name=\"db_mybatis\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"11\" parent=\"1\" name=\"db_o2odb\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"12\" parent=\"1\" name=\"db_shopmaster\">\n      <Current>1</Current>\n      <Visible>1</Visible>\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"13\" parent=\"1\" name=\"db_tmall\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"14\" parent=\"1\" name=\"db_tumoblog\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"15\" parent=\"1\" name=\"emall\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"16\" parent=\"1\" name=\"information_schema\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"17\" parent=\"1\" name=\"mysql\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"18\" parent=\"1\" name=\"o2ostore\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"19\" parent=\"1\" name=\"performance_schema\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"20\" parent=\"1\" name=\"sys\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <schema id=\"21\" parent=\"1\" name=\"tb_cuntaocunku\">\n      <Collation>utf8_general_ci</Collation>\n    </schema>\n    <collation id=\"22\" parent=\"1\" name=\"armscii8_bin\">\n      <Charset>armscii8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"23\" parent=\"1\" name=\"armscii8_general_ci\">\n      <Charset>armscii8</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"24\" parent=\"1\" name=\"ascii_bin\">\n      <Charset>ascii</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"25\" parent=\"1\" name=\"ascii_general_ci\">\n      <Charset>ascii</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"26\" parent=\"1\" name=\"big5_bin\">\n      <Charset>big5</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"27\" parent=\"1\" name=\"big5_chinese_ci\">\n      <Charset>big5</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"28\" parent=\"1\" name=\"binary\">\n      <Charset>binary</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"29\" parent=\"1\" name=\"cp1250_bin\">\n      <Charset>cp1250</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"30\" parent=\"1\" name=\"cp1250_croatian_ci\">\n      <Charset>cp1250</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"31\" parent=\"1\" name=\"cp1250_czech_cs\">\n      <Charset>cp1250</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"32\" parent=\"1\" name=\"cp1250_general_ci\">\n      <Charset>cp1250</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"33\" parent=\"1\" name=\"cp1250_polish_ci\">\n      <Charset>cp1250</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"34\" parent=\"1\" name=\"cp1251_bin\">\n      <Charset>cp1251</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"35\" parent=\"1\" name=\"cp1251_bulgarian_ci\">\n      <Charset>cp1251</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"36\" parent=\"1\" name=\"cp1251_general_ci\">\n      <Charset>cp1251</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"37\" parent=\"1\" name=\"cp1251_general_cs\">\n      <Charset>cp1251</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"38\" parent=\"1\" name=\"cp1251_ukrainian_ci\">\n      <Charset>cp1251</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"39\" parent=\"1\" name=\"cp1256_bin\">\n      <Charset>cp1256</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"40\" parent=\"1\" name=\"cp1256_general_ci\">\n      <Charset>cp1256</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"41\" parent=\"1\" name=\"cp1257_bin\">\n      <Charset>cp1257</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"42\" parent=\"1\" name=\"cp1257_general_ci\">\n      <Charset>cp1257</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"43\" parent=\"1\" name=\"cp1257_lithuanian_ci\">\n      <Charset>cp1257</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"44\" parent=\"1\" name=\"cp850_bin\">\n      <Charset>cp850</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"45\" parent=\"1\" name=\"cp850_general_ci\">\n      <Charset>cp850</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"46\" parent=\"1\" name=\"cp852_bin\">\n      <Charset>cp852</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"47\" parent=\"1\" name=\"cp852_general_ci\">\n      <Charset>cp852</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"48\" parent=\"1\" name=\"cp866_bin\">\n      <Charset>cp866</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"49\" parent=\"1\" name=\"cp866_general_ci\">\n      <Charset>cp866</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"50\" parent=\"1\" name=\"cp932_bin\">\n      <Charset>cp932</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"51\" parent=\"1\" name=\"cp932_japanese_ci\">\n      <Charset>cp932</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"52\" parent=\"1\" name=\"dec8_bin\">\n      <Charset>dec8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"53\" parent=\"1\" name=\"dec8_swedish_ci\">\n      <Charset>dec8</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"54\" parent=\"1\" name=\"eucjpms_bin\">\n      <Charset>eucjpms</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"55\" parent=\"1\" name=\"eucjpms_japanese_ci\">\n      <Charset>eucjpms</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"56\" parent=\"1\" name=\"euckr_bin\">\n      <Charset>euckr</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"57\" parent=\"1\" name=\"euckr_korean_ci\">\n      <Charset>euckr</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"58\" parent=\"1\" name=\"gb18030_bin\">\n      <Charset>gb18030</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"59\" parent=\"1\" name=\"gb18030_chinese_ci\">\n      <Charset>gb18030</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"60\" parent=\"1\" name=\"gb18030_unicode_520_ci\">\n      <Charset>gb18030</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"61\" parent=\"1\" name=\"gb2312_bin\">\n      <Charset>gb2312</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"62\" parent=\"1\" name=\"gb2312_chinese_ci\">\n      <Charset>gb2312</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"63\" parent=\"1\" name=\"gbk_bin\">\n      <Charset>gbk</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"64\" parent=\"1\" name=\"gbk_chinese_ci\">\n      <Charset>gbk</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"65\" parent=\"1\" name=\"geostd8_bin\">\n      <Charset>geostd8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"66\" parent=\"1\" name=\"geostd8_general_ci\">\n      <Charset>geostd8</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"67\" parent=\"1\" name=\"greek_bin\">\n      <Charset>greek</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"68\" parent=\"1\" name=\"greek_general_ci\">\n      <Charset>greek</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"69\" parent=\"1\" name=\"hebrew_bin\">\n      <Charset>hebrew</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"70\" parent=\"1\" name=\"hebrew_general_ci\">\n      <Charset>hebrew</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"71\" parent=\"1\" name=\"hp8_bin\">\n      <Charset>hp8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"72\" parent=\"1\" name=\"hp8_english_ci\">\n      <Charset>hp8</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"73\" parent=\"1\" name=\"keybcs2_bin\">\n      <Charset>keybcs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"74\" parent=\"1\" name=\"keybcs2_general_ci\">\n      <Charset>keybcs2</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"75\" parent=\"1\" name=\"koi8r_bin\">\n      <Charset>koi8r</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"76\" parent=\"1\" name=\"koi8r_general_ci\">\n      <Charset>koi8r</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"77\" parent=\"1\" name=\"koi8u_bin\">\n      <Charset>koi8u</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"78\" parent=\"1\" name=\"koi8u_general_ci\">\n      <Charset>koi8u</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"79\" parent=\"1\" name=\"latin1_bin\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"80\" parent=\"1\" name=\"latin1_danish_ci\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"81\" parent=\"1\" name=\"latin1_general_ci\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"82\" parent=\"1\" name=\"latin1_general_cs\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"83\" parent=\"1\" name=\"latin1_german1_ci\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"84\" parent=\"1\" name=\"latin1_german2_ci\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"85\" parent=\"1\" name=\"latin1_spanish_ci\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"86\" parent=\"1\" name=\"latin1_swedish_ci\">\n      <Charset>latin1</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"87\" parent=\"1\" name=\"latin2_bin\">\n      <Charset>latin2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"88\" parent=\"1\" name=\"latin2_croatian_ci\">\n      <Charset>latin2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"89\" parent=\"1\" name=\"latin2_czech_cs\">\n      <Charset>latin2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"90\" parent=\"1\" name=\"latin2_general_ci\">\n      <Charset>latin2</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"91\" parent=\"1\" name=\"latin2_hungarian_ci\">\n      <Charset>latin2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"92\" parent=\"1\" name=\"latin5_bin\">\n      <Charset>latin5</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"93\" parent=\"1\" name=\"latin5_turkish_ci\">\n      <Charset>latin5</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"94\" parent=\"1\" name=\"latin7_bin\">\n      <Charset>latin7</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"95\" parent=\"1\" name=\"latin7_estonian_cs\">\n      <Charset>latin7</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"96\" parent=\"1\" name=\"latin7_general_ci\">\n      <Charset>latin7</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"97\" parent=\"1\" name=\"latin7_general_cs\">\n      <Charset>latin7</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"98\" parent=\"1\" name=\"macce_bin\">\n      <Charset>macce</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"99\" parent=\"1\" name=\"macce_general_ci\">\n      <Charset>macce</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"100\" parent=\"1\" name=\"macroman_bin\">\n      <Charset>macroman</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"101\" parent=\"1\" name=\"macroman_general_ci\">\n      <Charset>macroman</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"102\" parent=\"1\" name=\"sjis_bin\">\n      <Charset>sjis</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"103\" parent=\"1\" name=\"sjis_japanese_ci\">\n      <Charset>sjis</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"104\" parent=\"1\" name=\"swe7_bin\">\n      <Charset>swe7</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"105\" parent=\"1\" name=\"swe7_swedish_ci\">\n      <Charset>swe7</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"106\" parent=\"1\" name=\"tis620_bin\">\n      <Charset>tis620</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"107\" parent=\"1\" name=\"tis620_thai_ci\">\n      <Charset>tis620</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"108\" parent=\"1\" name=\"ucs2_bin\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"109\" parent=\"1\" name=\"ucs2_croatian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"110\" parent=\"1\" name=\"ucs2_czech_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"111\" parent=\"1\" name=\"ucs2_danish_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"112\" parent=\"1\" name=\"ucs2_esperanto_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"113\" parent=\"1\" name=\"ucs2_estonian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"114\" parent=\"1\" name=\"ucs2_general_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"115\" parent=\"1\" name=\"ucs2_general_mysql500_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"116\" parent=\"1\" name=\"ucs2_german2_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"117\" parent=\"1\" name=\"ucs2_hungarian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"118\" parent=\"1\" name=\"ucs2_icelandic_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"119\" parent=\"1\" name=\"ucs2_latvian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"120\" parent=\"1\" name=\"ucs2_lithuanian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"121\" parent=\"1\" name=\"ucs2_persian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"122\" parent=\"1\" name=\"ucs2_polish_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"123\" parent=\"1\" name=\"ucs2_roman_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"124\" parent=\"1\" name=\"ucs2_romanian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"125\" parent=\"1\" name=\"ucs2_sinhala_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"126\" parent=\"1\" name=\"ucs2_slovak_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"127\" parent=\"1\" name=\"ucs2_slovenian_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"128\" parent=\"1\" name=\"ucs2_spanish2_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"129\" parent=\"1\" name=\"ucs2_spanish_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"130\" parent=\"1\" name=\"ucs2_swedish_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"131\" parent=\"1\" name=\"ucs2_turkish_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"132\" parent=\"1\" name=\"ucs2_unicode_520_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"133\" parent=\"1\" name=\"ucs2_unicode_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"134\" parent=\"1\" name=\"ucs2_vietnamese_ci\">\n      <Charset>ucs2</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"135\" parent=\"1\" name=\"ujis_bin\">\n      <Charset>ujis</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"136\" parent=\"1\" name=\"ujis_japanese_ci\">\n      <Charset>ujis</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"137\" parent=\"1\" name=\"utf16_bin\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"138\" parent=\"1\" name=\"utf16_croatian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"139\" parent=\"1\" name=\"utf16_czech_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"140\" parent=\"1\" name=\"utf16_danish_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"141\" parent=\"1\" name=\"utf16_esperanto_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"142\" parent=\"1\" name=\"utf16_estonian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"143\" parent=\"1\" name=\"utf16_general_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"144\" parent=\"1\" name=\"utf16_german2_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"145\" parent=\"1\" name=\"utf16_hungarian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"146\" parent=\"1\" name=\"utf16_icelandic_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"147\" parent=\"1\" name=\"utf16_latvian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"148\" parent=\"1\" name=\"utf16_lithuanian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"149\" parent=\"1\" name=\"utf16_persian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"150\" parent=\"1\" name=\"utf16_polish_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"151\" parent=\"1\" name=\"utf16_roman_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"152\" parent=\"1\" name=\"utf16_romanian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"153\" parent=\"1\" name=\"utf16_sinhala_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"154\" parent=\"1\" name=\"utf16_slovak_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"155\" parent=\"1\" name=\"utf16_slovenian_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"156\" parent=\"1\" name=\"utf16_spanish2_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"157\" parent=\"1\" name=\"utf16_spanish_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"158\" parent=\"1\" name=\"utf16_swedish_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"159\" parent=\"1\" name=\"utf16_turkish_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"160\" parent=\"1\" name=\"utf16_unicode_520_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"161\" parent=\"1\" name=\"utf16_unicode_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"162\" parent=\"1\" name=\"utf16_vietnamese_ci\">\n      <Charset>utf16</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"163\" parent=\"1\" name=\"utf16le_bin\">\n      <Charset>utf16le</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"164\" parent=\"1\" name=\"utf16le_general_ci\">\n      <Charset>utf16le</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"165\" parent=\"1\" name=\"utf32_bin\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"166\" parent=\"1\" name=\"utf32_croatian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"167\" parent=\"1\" name=\"utf32_czech_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"168\" parent=\"1\" name=\"utf32_danish_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"169\" parent=\"1\" name=\"utf32_esperanto_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"170\" parent=\"1\" name=\"utf32_estonian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"171\" parent=\"1\" name=\"utf32_general_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"172\" parent=\"1\" name=\"utf32_german2_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"173\" parent=\"1\" name=\"utf32_hungarian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"174\" parent=\"1\" name=\"utf32_icelandic_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"175\" parent=\"1\" name=\"utf32_latvian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"176\" parent=\"1\" name=\"utf32_lithuanian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"177\" parent=\"1\" name=\"utf32_persian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"178\" parent=\"1\" name=\"utf32_polish_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"179\" parent=\"1\" name=\"utf32_roman_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"180\" parent=\"1\" name=\"utf32_romanian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"181\" parent=\"1\" name=\"utf32_sinhala_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"182\" parent=\"1\" name=\"utf32_slovak_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"183\" parent=\"1\" name=\"utf32_slovenian_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"184\" parent=\"1\" name=\"utf32_spanish2_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"185\" parent=\"1\" name=\"utf32_spanish_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"186\" parent=\"1\" name=\"utf32_swedish_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"187\" parent=\"1\" name=\"utf32_turkish_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"188\" parent=\"1\" name=\"utf32_unicode_520_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"189\" parent=\"1\" name=\"utf32_unicode_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"190\" parent=\"1\" name=\"utf32_vietnamese_ci\">\n      <Charset>utf32</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"191\" parent=\"1\" name=\"utf8_bin\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"192\" parent=\"1\" name=\"utf8_croatian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"193\" parent=\"1\" name=\"utf8_czech_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"194\" parent=\"1\" name=\"utf8_danish_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"195\" parent=\"1\" name=\"utf8_esperanto_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"196\" parent=\"1\" name=\"utf8_estonian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"197\" parent=\"1\" name=\"utf8_general_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"198\" parent=\"1\" name=\"utf8_general_mysql500_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"199\" parent=\"1\" name=\"utf8_german2_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"200\" parent=\"1\" name=\"utf8_hungarian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"201\" parent=\"1\" name=\"utf8_icelandic_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"202\" parent=\"1\" name=\"utf8_latvian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"203\" parent=\"1\" name=\"utf8_lithuanian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"204\" parent=\"1\" name=\"utf8_persian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"205\" parent=\"1\" name=\"utf8_polish_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"206\" parent=\"1\" name=\"utf8_roman_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"207\" parent=\"1\" name=\"utf8_romanian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"208\" parent=\"1\" name=\"utf8_sinhala_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"209\" parent=\"1\" name=\"utf8_slovak_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"210\" parent=\"1\" name=\"utf8_slovenian_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"211\" parent=\"1\" name=\"utf8_spanish2_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"212\" parent=\"1\" name=\"utf8_spanish_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"213\" parent=\"1\" name=\"utf8_swedish_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"214\" parent=\"1\" name=\"utf8_turkish_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"215\" parent=\"1\" name=\"utf8_unicode_520_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"216\" parent=\"1\" name=\"utf8_unicode_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"217\" parent=\"1\" name=\"utf8_vietnamese_ci\">\n      <Charset>utf8</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"218\" parent=\"1\" name=\"utf8mb4_bin\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"219\" parent=\"1\" name=\"utf8mb4_croatian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"220\" parent=\"1\" name=\"utf8mb4_czech_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"221\" parent=\"1\" name=\"utf8mb4_danish_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"222\" parent=\"1\" name=\"utf8mb4_esperanto_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"223\" parent=\"1\" name=\"utf8mb4_estonian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"224\" parent=\"1\" name=\"utf8mb4_general_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>1</DefaultForCharset>\n    </collation>\n    <collation id=\"225\" parent=\"1\" name=\"utf8mb4_german2_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"226\" parent=\"1\" name=\"utf8mb4_hungarian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"227\" parent=\"1\" name=\"utf8mb4_icelandic_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"228\" parent=\"1\" name=\"utf8mb4_latvian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"229\" parent=\"1\" name=\"utf8mb4_lithuanian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"230\" parent=\"1\" name=\"utf8mb4_persian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"231\" parent=\"1\" name=\"utf8mb4_polish_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"232\" parent=\"1\" name=\"utf8mb4_roman_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"233\" parent=\"1\" name=\"utf8mb4_romanian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"234\" parent=\"1\" name=\"utf8mb4_sinhala_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"235\" parent=\"1\" name=\"utf8mb4_slovak_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"236\" parent=\"1\" name=\"utf8mb4_slovenian_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"237\" parent=\"1\" name=\"utf8mb4_spanish2_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"238\" parent=\"1\" name=\"utf8mb4_spanish_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"239\" parent=\"1\" name=\"utf8mb4_swedish_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"240\" parent=\"1\" name=\"utf8mb4_turkish_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"241\" parent=\"1\" name=\"utf8mb4_unicode_520_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"242\" parent=\"1\" name=\"utf8mb4_unicode_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <collation id=\"243\" parent=\"1\" name=\"utf8mb4_vietnamese_ci\">\n      <Charset>utf8mb4</Charset>\n      <DefaultForCharset>0</DefaultForCharset>\n    </collation>\n    <table id=\"244\" parent=\"12\" name=\"activity\"/>\n    <table id=\"245\" parent=\"12\" name=\"address\"/>\n    <table id=\"246\" parent=\"12\" name=\"admin\"/>\n    <table id=\"247\" parent=\"12\" name=\"category\"/>\n    <table id=\"248\" parent=\"12\" name=\"chat\"/>\n    <table id=\"249\" parent=\"12\" name=\"collection\"/>\n    <table id=\"250\" parent=\"12\" name=\"comment\"/>\n    <table id=\"251\" parent=\"12\" name=\"deliver\"/>\n    <table id=\"252\" parent=\"12\" name=\"goods\"/>\n    <table id=\"253\" parent=\"12\" name=\"imagepath\"/>\n    <table id=\"254\" parent=\"12\" name=\"indent\"/>\n    <table id=\"255\" parent=\"12\" name=\"orderitem\"/>\n    <table id=\"256\" parent=\"12\" name=\"shopcart\"/>\n    <table id=\"257\" parent=\"12\" name=\"user\"/>\n    <column id=\"258\" parent=\"244\" name=\"activityId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"259\" parent=\"244\" name=\"activityName\">\n      <Position>2</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"260\" parent=\"244\" name=\"activityDes\">\n      <Position>3</Position>\n      <DataType>varchar(500)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"261\" parent=\"244\" name=\"discount\">\n      <Position>4</Position>\n      <DataType>float|0s</DataType>\n      <DefaultExpression>&apos;1&apos;</DefaultExpression>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"262\" parent=\"244\" name=\"fullPrice\">\n      <Position>5</Position>\n      <DataType>int(12)|0s</DataType>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"263\" parent=\"244\" name=\"reducePrice\">\n      <Position>6</Position>\n      <DataType>int(12)|0s</DataType>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"264\" parent=\"244\" name=\"fullNum\">\n      <Position>7</Position>\n      <DataType>int(12)|0s</DataType>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"265\" parent=\"244\" name=\"reduceNum\">\n      <Position>8</Position>\n      <DataType>int(12)|0s</DataType>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <key id=\"266\" parent=\"244\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>activityId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <column id=\"267\" parent=\"245\" name=\"addressID\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"268\" parent=\"245\" name=\"userId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"269\" parent=\"245\" name=\"province\">\n      <Position>3</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"270\" parent=\"245\" name=\"city\">\n      <Position>4</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"271\" parent=\"245\" name=\"county\">\n      <Position>5</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"272\" parent=\"245\" name=\"detailAddr\">\n      <Position>6</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"273\" parent=\"245\" name=\"conName\">\n      <Position>7</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"274\" parent=\"245\" name=\"conTel\">\n      <Position>8</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"275\" parent=\"245\" name=\"addressID\">\n      <ColNames>addressID</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"276\" parent=\"245\" name=\"userId\">\n      <ColNames>userId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"277\" parent=\"245\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>addressID</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"278\" parent=\"245\" name=\"address_ibfk_1\">\n      <ColNames>userId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"279\" parent=\"246\" name=\"adminId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"280\" parent=\"246\" name=\"adminName\">\n      <Position>2</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"281\" parent=\"246\" name=\"password\">\n      <Position>3</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <key id=\"282\" parent=\"246\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>adminId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <column id=\"283\" parent=\"247\" name=\"cateId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"284\" parent=\"247\" name=\"cateName\">\n      <Position>2</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <key id=\"285\" parent=\"247\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>cateId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <column id=\"286\" parent=\"248\" name=\"chatId\">\n      <Position>1</Position>\n      <DataType>int(20)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"287\" parent=\"248\" name=\"sendUser\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"288\" parent=\"248\" name=\"receiveUser\">\n      <Position>3</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"289\" parent=\"248\" name=\"MsgContent\">\n      <Position>4</Position>\n      <DataType>varchar(255)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"290\" parent=\"248\" name=\"MsgTime\">\n      <Position>5</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"291\" parent=\"248\" name=\"sendUser\">\n      <ColNames>sendUser</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"292\" parent=\"248\" name=\"receiveUser\">\n      <ColNames>receiveUser</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"293\" parent=\"248\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>chatId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"294\" parent=\"248\" name=\"chat_ibfk_1\">\n      <ColNames>sendUser</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"295\" parent=\"248\" name=\"chat_ibfk_2\">\n      <ColNames>receiveUser</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"296\" parent=\"249\" name=\"userId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"297\" parent=\"249\" name=\"goodsId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"298\" parent=\"249\" name=\"collectTime\">\n      <Position>3</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"299\" parent=\"249\" name=\"collection_ibfk_2\">\n      <ColNames>goodsId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"300\" parent=\"249\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>userId\ngoodsId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"301\" parent=\"249\" name=\"collection_ibfk_1\">\n      <ColNames>userId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"302\" parent=\"249\" name=\"collection_ibfk_2\">\n      <ColNames>goodsId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>goods</RefTableName>\n      <RefColNames>goodsId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"303\" parent=\"250\" name=\"commentId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"304\" parent=\"250\" name=\"userId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"305\" parent=\"250\" name=\"goodsId\">\n      <Position>3</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"306\" parent=\"250\" name=\"point\">\n      <Position>4</Position>\n      <DataType>int(8)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"307\" parent=\"250\" name=\"content\">\n      <Position>5</Position>\n      <DataType>varchar(255)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"308\" parent=\"250\" name=\"commentTime\">\n      <Position>6</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"309\" parent=\"250\" name=\"userId\">\n      <ColNames>userId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"310\" parent=\"250\" name=\"goodsId\">\n      <ColNames>goodsId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"311\" parent=\"250\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>commentId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"312\" parent=\"250\" name=\"comment_ibfk_1\">\n      <ColNames>userId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"313\" parent=\"250\" name=\"comment_ibfk_2\">\n      <ColNames>goodsId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>goods</RefTableName>\n      <RefColNames>goodsId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"314\" parent=\"251\" name=\"deliverId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"315\" parent=\"251\" name=\"orderId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"316\" parent=\"251\" name=\"sendId\">\n      <Position>3</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"317\" parent=\"251\" name=\"orderId\">\n      <ColNames>orderId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"318\" parent=\"251\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>deliverId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"319\" parent=\"251\" name=\"deliver_ibfk_1\">\n      <ColNames>orderId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>indent</RefTableName>\n      <RefColNames>orderId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"320\" parent=\"252\" name=\"goodsId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"321\" parent=\"252\" name=\"goodsName\">\n      <Position>2</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"322\" parent=\"252\" name=\"price\">\n      <Position>3</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"323\" parent=\"252\" name=\"num\">\n      <Position>4</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"324\" parent=\"252\" name=\"upTime\">\n      <Position>5</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"325\" parent=\"252\" name=\"category\">\n      <Position>6</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"326\" parent=\"252\" name=\"detailCate\">\n      <Position>7</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"327\" parent=\"252\" name=\"description\">\n      <Position>8</Position>\n      <DataType>text|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"328\" parent=\"252\" name=\"activityId\">\n      <Position>9</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <DefaultExpression>&apos;1&apos;</DefaultExpression>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"329\" parent=\"252\" name=\"category\">\n      <ColNames>category</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"330\" parent=\"252\" name=\"activityId\">\n      <ColNames>activityId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"331\" parent=\"252\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>goodsId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"332\" parent=\"252\" name=\"goods_ibfk_2\">\n      <ColNames>category</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>category</RefTableName>\n      <RefColNames>cateId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"333\" parent=\"252\" name=\"goods_ibfk_1\">\n      <ColNames>activityId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>activity</RefTableName>\n      <RefColNames>activityId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"334\" parent=\"253\" name=\"pathId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"335\" parent=\"253\" name=\"goodId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"336\" parent=\"253\" name=\"path\">\n      <Position>3</Position>\n      <DataType>varchar(255)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"337\" parent=\"253\" name=\"goodid\">\n      <ColNames>goodId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"338\" parent=\"253\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>pathId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"339\" parent=\"253\" name=\"imagepath_ibfk_1\">\n      <ColNames>goodId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>goods</RefTableName>\n      <RefColNames>goodsId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"340\" parent=\"254\" name=\"orderId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"341\" parent=\"254\" name=\"userId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"342\" parent=\"254\" name=\"orderTime\">\n      <Position>3</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"343\" parent=\"254\" name=\"oldPrice\">\n      <Position>4</Position>\n      <DataType>float|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"344\" parent=\"254\" name=\"newPrice\">\n      <Position>5</Position>\n      <DataType>float|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"345\" parent=\"254\" name=\"isPay\">\n      <Position>6</Position>\n      <DataType>tinyint(1)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"346\" parent=\"254\" name=\"isSend\">\n      <Position>7</Position>\n      <DataType>tinyint(1)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"347\" parent=\"254\" name=\"isReceive\">\n      <Position>8</Position>\n      <DataType>tinyint(1)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"348\" parent=\"254\" name=\"isComplete\">\n      <Position>9</Position>\n      <DataType>tinyint(1)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"349\" parent=\"254\" name=\"addressId\">\n      <Position>10</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"350\" parent=\"254\" name=\"userId\">\n      <ColNames>userId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"351\" parent=\"254\" name=\"orderGoods\">\n      <ColNames>orderTime</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"352\" parent=\"254\" name=\"addressId\">\n      <ColNames>addressId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"353\" parent=\"254\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>orderId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"354\" parent=\"254\" name=\"indent_ibfk_1\">\n      <ColNames>userId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"355\" parent=\"254\" name=\"indent_ibfk_2\">\n      <ColNames>addressId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>address</RefTableName>\n      <RefColNames>addressID</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"356\" parent=\"255\" name=\"itemId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"357\" parent=\"255\" name=\"orderId\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"358\" parent=\"255\" name=\"goodsId\">\n      <Position>3</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"359\" parent=\"255\" name=\"num\">\n      <Position>4</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"360\" parent=\"255\" name=\"orderId\">\n      <ColNames>orderId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"361\" parent=\"255\" name=\"goodsId\">\n      <ColNames>goodsId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"362\" parent=\"255\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>itemId</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"363\" parent=\"255\" name=\"orderitem_ibfk_1\">\n      <ColNames>orderId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>indent</RefTableName>\n      <RefColNames>orderId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"364\" parent=\"255\" name=\"orderitem_ibfk_2\">\n      <ColNames>goodsId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>goods</RefTableName>\n      <RefColNames>goodsId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"365\" parent=\"256\" name=\"userId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"366\" parent=\"256\" name=\"goodsid\">\n      <Position>2</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"367\" parent=\"256\" name=\"cateDate\">\n      <Position>3</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"368\" parent=\"256\" name=\"goodsNum\">\n      <Position>4</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"369\" parent=\"256\" name=\"userId\">\n      <ColNames>userId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <index id=\"370\" parent=\"256\" name=\"goodsid\">\n      <ColNames>goodsid</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"371\" parent=\"256\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>userId\ngoodsid</ColNames>\n      <Primary>1</Primary>\n    </key>\n    <foreign-key id=\"372\" parent=\"256\" name=\"shopcart_ibfk_1\">\n      <ColNames>userId</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>user</RefTableName>\n      <RefColNames>userId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <foreign-key id=\"373\" parent=\"256\" name=\"shopcart_ibfk_2\">\n      <ColNames>goodsid</ColNames>\n      <RefSchemaName>db_shopmaster</RefSchemaName>\n      <RefTableName>goods</RefTableName>\n      <RefColNames>goodsId</RefColNames>\n      <OnUpdate>cascade</OnUpdate>\n      <OnDelete>cascade</OnDelete>\n    </foreign-key>\n    <column id=\"374\" parent=\"257\" name=\"userId\">\n      <Position>1</Position>\n      <DataType>int(12)|0s</DataType>\n      <NotNull>1</NotNull>\n      <SequenceIdentity>1</SequenceIdentity>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"375\" parent=\"257\" name=\"username\">\n      <Position>2</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"376\" parent=\"257\" name=\"password\">\n      <Position>3</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"377\" parent=\"257\" name=\"regTime\">\n      <Position>4</Position>\n      <DataType>datetime|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"378\" parent=\"257\" name=\"email\">\n      <Position>5</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <column id=\"379\" parent=\"257\" name=\"telephone\">\n      <Position>6</Position>\n      <DataType>varchar(50)|0s</DataType>\n      <NotNull>1</NotNull>\n      <ColumnKind>normal</ColumnKind>\n    </column>\n    <index id=\"380\" parent=\"257\" name=\"userId\">\n      <ColNames>userId</ColNames>\n      <Type>btree</Type>\n    </index>\n    <key id=\"381\" parent=\"257\" name=\"PRIMARY\">\n      <NameSurrogate>1</NameSurrogate>\n      <ColNames>userId</ColNames>\n      <Primary>1</Primary>\n    </key>\n  </database-model>\n</dataSource>"
  },
  {
    "path": "ssmschoolshop/.idea/dataSources.local.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"dataSourceStorageLocal\">\n    <data-source name=\"db_shopmaster@localhost\" uuid=\"2c2b7821-8da1-495a-884a-0b2c51399650\">\n      <database-info product=\"MySQL\" version=\"5.7.20-log\" jdbc-version=\"4.0\" driver-name=\"MySQL Connector Java\" driver-version=\"mysql-connector-java-5.1.46 ( Revision: 9cc87a48e75c2d2e87c1a293b2862ce651cb256e )\">\n        <extra-name-characters>#@</extra-name-characters>\n        <identifier-quote-string>`</identifier-quote-string>\n      </database-info>\n      <case-sensitivity plain-identifiers=\"lower\" quoted-identifiers=\"lower\" />\n      <secret-storage>master_key</secret-storage>\n      <user-name>root</user-name>\n      <introspection-schemas>*:db_shopmaster</introspection-schemas>\n    </data-source>\n  </component>\n</project>"
  },
  {
    "path": "ssmschoolshop/.idea/dataSources.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"DataSourceManagerImpl\" format=\"xml\" multifile-model=\"true\">\n    <data-source source=\"LOCAL\" name=\"db_shopmaster@localhost\" uuid=\"2c2b7821-8da1-495a-884a-0b2c51399650\">\n      <driver-ref>mysql</driver-ref>\n      <synchronize>true</synchronize>\n      <remarks>db_shopmaster</remarks>\n      <jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>\n      <jdbc-url>jdbc:mysql://localhost:3306/db_shopmaster</jdbc-url>\n      <driver-properties>\n        <property name=\"autoReconnect\" value=\"true\" />\n        <property name=\"zeroDateTimeBehavior\" value=\"convertToNull\" />\n        <property name=\"tinyInt1isBit\" value=\"false\" />\n        <property name=\"characterEncoding\" value=\"utf8\" />\n        <property name=\"characterSetResults\" value=\"utf8\" />\n        <property name=\"yearIsDateType\" value=\"false\" />\n      </driver-properties>\n    </data-source>\n  </component>\n</project>"
  },
  {
    "path": "ssmschoolshop/.idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"file://$PROJECT_DIR$\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": "ssmschoolshop/.idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ExternalStorageConfigurationManager\" enabled=\"true\" />\n  <component name=\"FrameworkDetectionExcludesConfiguration\">\n    <file type=\"web\" url=\"file://$PROJECT_DIR$\" />\n  </component>\n  <component name=\"MavenProjectsManager\">\n    <option name=\"originalFiles\">\n      <list>\n        <option value=\"$PROJECT_DIR$/pom.xml\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_8\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/out\" />\n  </component>\n</project>"
  },
  {
    "path": "ssmschoolshop/.idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ArtifactsWorkspaceSettings\">\n    <artifacts-to-build>\n      <artifact name=\"ssmschoolshop:war exploded\" />\n    </artifacts-to-build>\n  </component>\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"9cd26514-804c-4d9a-ba0d-82cef0d4b73b\" name=\"Default\" comment=\"\" />\n    <ignored path=\"$PROJECT_DIR$/out/\" />\n    <ignored path=\"$PROJECT_DIR$/target/\" />\n    <option name=\"EXCLUDED_CONVERTED_TO_IGNORED\" value=\"true\" />\n    <option name=\"TRACKING_ENABLED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"DatabaseView\">\n    <option name=\"SHOW_INTERMEDIATE\" value=\"true\" />\n    <option name=\"GROUP_DATA_SOURCES\" value=\"true\" />\n    <option name=\"GROUP_SCHEMA\" value=\"true\" />\n    <option name=\"GROUP_CONTENTS\" value=\"false\" />\n    <option name=\"SORT_POSITIONED\" value=\"false\" />\n    <option name=\"SHOW_EMPTY_GROUPS\" value=\"false\" />\n    <option name=\"AUTO_SCROLL_FROM_SOURCE\" value=\"false\" />\n    <option name=\"HIDDEN_KINDS\">\n      <set />\n    </option>\n    <expand />\n    <select />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf>\n      <file leaf-file-name=\"shopcart.jsp\" pinned=\"false\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/shopcart.jsp\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"224\">\n              <caret line=\"15\" column=\"60\" selection-start-line=\"15\" selection-start-column=\"60\" selection-end-line=\"15\" selection-end-column=\"60\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"FileTemplateManagerImpl\">\n    <option name=\"RECENT_TEMPLATES\">\n      <list>\n        <option value=\"Class\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"FindInProjectRecents\">\n    <findStrings>\n      <find>com.n</find>\n      <find>src=</find>\n      <find>pictures</find>\n      <find>shopimage</find>\n      <find>${pageContext.request.contextPath}/pictures</find>\n      <find>pojo</find>\n      <find>neu</find>\n    </findStrings>\n    <replaceStrings>\n      <replace>/pictures</replace>\n    </replaceStrings>\n  </component>\n  <component name=\"GradleLocalSettings\">\n    <option name=\"projectSyncType\">\n      <map>\n        <entry key=\"$PROJECT_DIR$/../SpringBootBlog/mongodb-file-server\" value=\"PREVIEW\" />\n        <entry key=\"D:/SpringBootBlog/fanke-start/fanke-start\" value=\"PREVIEW\" />\n        <entry key=\"D:/SpringBootBlog/springbootEs\" value=\"PREVIEW\" />\n        <entry key=\"D:/SpringBootBlog/博客教学视频源码/x1hn1k/thymeleaf-in-action\" value=\"PREVIEW\" />\n        <entry key=\"D:/物联网实验室/纪检处外包/毕业设计/OnlineMall/mall\" value=\"PREVIEW\" />\n        <entry key=\"F:/fanke-start\" value=\"PREVIEW\" />\n        <entry key=\"F:/fanke-start/fanke-start\" value=\"PREVIEW\" />\n      </map>\n    </option>\n  </component>\n  <component name=\"IdeDocumentHistory\">\n    <option name=\"CHANGED_PATHS\">\n      <list>\n        <option value=\"$PROJECT_DIR$/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/web.xml\" />\n        <option value=\"$PROJECT_DIR$/generatorConfig.xml\" />\n        <option value=\"$PROJECT_DIR$/src/test/java/com/zhang/test/MBGTest.java\" />\n        <option value=\"$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/service/impl/AddressServiceImpl.java\" />\n        <option value=\"$PROJECT_DIR$/src/main/resources/applicationContext.xml\" />\n        <option value=\"$PROJECT_DIR$/src/main/resources/mybatis-config.xml\" />\n        <option value=\"$PROJECT_DIR$/src/main/resources/spring-mvc.xml\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/main.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/search.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/orderConfirm.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/information.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/header.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/goodsNav.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/frontChat.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/favorite.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/detail.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/WEB-INF/views/chatrobot.jsp\" />\n        <option value=\"$PROJECT_DIR$/src/main/webapp/js/shopcart.js\" />\n        <option value=\"$PROJECT_DIR$/src/main/resources/mapper/GoodsMapper.xml\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"JsBuildToolGruntFileManager\" detection-done=\"true\" sorting=\"DEFINITION_ORDER\" />\n  <component name=\"JsBuildToolPackageJson\" detection-done=\"true\" sorting=\"DEFINITION_ORDER\" />\n  <component name=\"JsGulpfileManager\">\n    <detection-done>true</detection-done>\n    <sorting>DEFINITION_ORDER</sorting>\n  </component>\n  <component name=\"LogFilters\">\n    <option name=\"FILTER_ERRORS\" value=\"false\" />\n    <option name=\"FILTER_WARNINGS\" value=\"false\" />\n    <option name=\"FILTER_INFO\" value=\"true\" />\n    <option name=\"FILTER_DEBUG\" value=\"true\" />\n    <option name=\"CUSTOM_FILTER\" />\n  </component>\n  <component name=\"MavenImportPreferences\">\n    <option name=\"generalSettings\">\n      <MavenGeneralSettings>\n        <option name=\"localRepository\" value=\"D:\\.m2\\repository\" />\n        <option name=\"mavenHome\" value=\"D:/maven/apache-maven-3.5.3-bin/apache-maven-3.5.3\" />\n        <option name=\"pluginUpdatePolicy\" value=\"UPDATE\" />\n        <option name=\"userSettingsFile\" value=\"D:\\maven\\apache-maven-3.5.3-bin\\settings.xml\" />\n      </MavenGeneralSettings>\n    </option>\n    <option name=\"importingSettings\">\n      <MavenImportingSettings>\n        <option name=\"importAutomatically\" value=\"true\" />\n      </MavenImportingSettings>\n    </option>\n  </component>\n  <component name=\"NodePackageJsonFileManager\">\n    <packageJsonPaths />\n  </component>\n  <component name=\"ProjectFrameBounds\" extendedState=\"6\">\n    <option name=\"x\" value=\"-8\" />\n    <option name=\"y\" value=\"-8\" />\n    <option name=\"width\" value=\"1382\" />\n    <option name=\"height\" value=\"744\" />\n  </component>\n  <component name=\"ProjectView\">\n    <navigator proportions=\"\" version=\"1\">\n      <foldersAlwaysOnTop value=\"true\" />\n    </navigator>\n    <panes>\n      <pane id=\"AndroidView\" />\n      <pane id=\"Scope\" />\n      <pane id=\"PackagesPane\" />\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <expand>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"ssmschoolshop\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"ssmschoolshop\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"mapper\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n          </expand>\n          <select />\n        </subPane>\n      </pane>\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"WebServerToolWindowFactoryState\" value=\"false\" />\n    <property name=\"aspect.path.notification.shown\" value=\"true\" />\n    <property name=\"com.intellij.database.dataSource.DataSourceTemplate\" value=\"MySQL\" />\n    <property name=\"last_opened_file_path\" value=\"D:/upload\" />\n    <property name=\"nodejs_interpreter_path.stuck_in_default_project\" value=\"undefined stuck path\" />\n    <property name=\"nodejs_npm_path_reset_for_default_project\" value=\"true\" />\n    <property name=\"project.structure.last.edited\" value=\"Modules\" />\n    <property name=\"project.structure.proportion\" value=\"0.15391879\" />\n    <property name=\"project.structure.side.proportion\" value=\"0.2\" />\n    <property name=\"settings.editor.selected.configurable\" value=\"fileTemplates\" />\n  </component>\n  <component name=\"RecentsManager\">\n    <key name=\"MoveFile.RECENT_KEYS\">\n      <recent name=\"D:\\Github\\ssmschoolshop\\src\\main\\webapp\" />\n    </key>\n    <key name=\"CopyFile.RECENT_KEYS\">\n      <recent name=\"D:\\Github\\ssmschoolshop\\src\\main\\resources\\mapper\" />\n      <recent name=\"D:\\Github\\ssmschoolshop\\src\\main\\webapp\\WEB-INF\" />\n      <recent name=\"D:\\Github\\ssmschoolshop\\src\\main\\java\\com\\zhang\\ssmschoolshop\" />\n      <recent name=\"D:\\Github\\ssmschoolshop\\src\\main\\resources\" />\n      <recent name=\"D:\\Github\\ssmschoolshop\\src\\test\\java\\com\\zhang\\test\" />\n    </key>\n  </component>\n  <component name=\"RunDashboard\">\n    <option name=\"ruleStates\">\n      <list>\n        <RuleState>\n          <option name=\"name\" value=\"ConfigurationTypeDashboardGroupingRule\" />\n        </RuleState>\n        <RuleState>\n          <option name=\"name\" value=\"StatusDashboardGroupingRule\" />\n        </RuleState>\n      </list>\n    </option>\n  </component>\n  <component name=\"RunManager\">\n    <configuration default=\"true\" type=\"Application\" factoryName=\"Application\">\n      <option name=\"WORKING_DIRECTORY\" value=\"$PROJECT_DIR$\" />\n    </configuration>\n    <configuration default=\"true\" type=\"JUnit\" factoryName=\"JUnit\">\n      <option name=\"ALTERNATIVE_JRE_PATH_ENABLED\" value=\"false\" />\n      <option name=\"ALTERNATIVE_JRE_PATH\" />\n      <option name=\"PACKAGE_NAME\" />\n      <option name=\"MAIN_CLASS_NAME\" />\n      <option name=\"METHOD_NAME\" />\n      <option name=\"TEST_OBJECT\" value=\"class\" />\n      <option name=\"VM_PARAMETERS\" value=\"-ea\" />\n      <option name=\"PARAMETERS\" />\n      <option name=\"WORKING_DIRECTORY\" value=\"%MODULE_WORKING_DIR%\" />\n      <option name=\"PASS_PARENT_ENVS\" value=\"true\" />\n      <option name=\"TEST_SEARCH_SCOPE\">\n        <value defaultName=\"singleModule\" />\n      </option>\n      <patterns />\n    </configuration>\n    <configuration default=\"true\" type=\"TestNG\" factoryName=\"TestNG\">\n      <option name=\"ALTERNATIVE_JRE_PATH_ENABLED\" value=\"false\" />\n      <option name=\"ALTERNATIVE_JRE_PATH\" />\n      <option name=\"SUITE_NAME\" />\n      <option name=\"PACKAGE_NAME\" />\n      <option name=\"MAIN_CLASS_NAME\" />\n      <option name=\"METHOD_NAME\" />\n      <option name=\"GROUP_NAME\" />\n      <option name=\"TEST_OBJECT\" value=\"CLASS\" />\n      <option name=\"VM_PARAMETERS\" value=\"-ea\" />\n      <option name=\"PARAMETERS\" />\n      <option name=\"WORKING_DIRECTORY\" value=\"%MODULE_WORKING_DIR%\" />\n      <option name=\"OUTPUT_DIRECTORY\" />\n      <option name=\"PASS_PARENT_ENVS\" value=\"true\" />\n      <option name=\"TEST_SEARCH_SCOPE\">\n        <value defaultName=\"singleModule\" />\n      </option>\n      <option name=\"USE_DEFAULT_REPORTERS\" value=\"false\" />\n      <option name=\"PROPERTIES_FILE\" />\n      <properties />\n      <listeners />\n    </configuration>\n    <configuration name=\"SSMshop\" type=\"#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory\" factoryName=\"Local\" APPLICATION_SERVER_NAME=\"Tomcat 9.0.6\" ALTERNATIVE_JRE_ENABLED=\"false\">\n      <option name=\"UPDATE_ON_FRAME_DEACTIVATION\" value=\"true\" />\n      <option name=\"UPDATE_CLASSES_ON_FRAME_DEACTIVATION\" value=\"true\" />\n      <deployment>\n        <artifact name=\"ssmschoolshop:war exploded\">\n          <settings>\n            <option name=\"CONTEXT_PATH\" value=\"/shop\" />\n          </settings>\n        </artifact>\n        <file path=\"D:/upload\">\n          <settings>\n            <option name=\"CONTEXT_PATH\" value=\"/pictures\" />\n          </settings>\n        </file>\n      </deployment>\n      <server-settings>\n        <option name=\"BASE_DIRECTORY_NAME\" value=\"Unnamed_ssmschoolshop\" />\n        <option name=\"DEPLOY_TOMCAT_APPS\" value=\"true\" />\n      </server-settings>\n      <predefined_log_file id=\"Tomcat\" enabled=\"true\" />\n      <predefined_log_file id=\"Tomcat Catalina\" enabled=\"true\" />\n      <predefined_log_file id=\"Tomcat Manager\" enabled=\"false\" />\n      <predefined_log_file id=\"Tomcat Host Manager\" enabled=\"false\" />\n      <predefined_log_file id=\"Tomcat Localhost Access\" enabled=\"false\" />\n      <RunnerSettings RunnerId=\"Debug\">\n        <option name=\"DEBUG_PORT\" value=\"59102\" />\n      </RunnerSettings>\n      <ConfigurationWrapper VM_VAR=\"JAVA_OPTS\" RunnerId=\"Cover\">\n        <option name=\"USE_ENV_VARIABLES\" value=\"true\" />\n        <STARTUP>\n          <option name=\"USE_DEFAULT\" value=\"true\" />\n          <option name=\"SCRIPT\" value=\"\" />\n          <option name=\"VM_PARAMETERS\" value=\"\" />\n          <option name=\"PROGRAM_PARAMETERS\" value=\"\" />\n        </STARTUP>\n        <SHUTDOWN>\n          <option name=\"USE_DEFAULT\" value=\"true\" />\n          <option name=\"SCRIPT\" value=\"\" />\n          <option name=\"VM_PARAMETERS\" value=\"\" />\n          <option name=\"PROGRAM_PARAMETERS\" value=\"\" />\n        </SHUTDOWN>\n      </ConfigurationWrapper>\n      <ConfigurationWrapper VM_VAR=\"JAVA_OPTS\" RunnerId=\"Debug\">\n        <option name=\"USE_ENV_VARIABLES\" value=\"true\" />\n        <STARTUP>\n          <option name=\"USE_DEFAULT\" value=\"true\" />\n          <option name=\"SCRIPT\" value=\"\" />\n          <option name=\"VM_PARAMETERS\" value=\"\" />\n          <option name=\"PROGRAM_PARAMETERS\" value=\"\" />\n        </STARTUP>\n        <SHUTDOWN>\n          <option name=\"USE_DEFAULT\" value=\"true\" />\n          <option name=\"SCRIPT\" value=\"\" />\n          <option name=\"VM_PARAMETERS\" value=\"\" />\n          <option name=\"PROGRAM_PARAMETERS\" value=\"\" />\n        </SHUTDOWN>\n      </ConfigurationWrapper>\n      <ConfigurationWrapper VM_VAR=\"JAVA_OPTS\" RunnerId=\"Run\">\n        <option name=\"USE_ENV_VARIABLES\" value=\"true\" />\n        <STARTUP>\n          <option name=\"USE_DEFAULT\" value=\"true\" />\n          <option name=\"SCRIPT\" value=\"\" />\n          <option name=\"VM_PARAMETERS\" value=\"\" />\n          <option name=\"PROGRAM_PARAMETERS\" value=\"\" />\n        </STARTUP>\n        <SHUTDOWN>\n          <option name=\"USE_DEFAULT\" value=\"true\" />\n          <option name=\"SCRIPT\" value=\"\" />\n          <option name=\"VM_PARAMETERS\" value=\"\" />\n          <option name=\"PROGRAM_PARAMETERS\" value=\"\" />\n        </SHUTDOWN>\n      </ConfigurationWrapper>\n      <method>\n        <option name=\"BuildArtifacts\" enabled=\"true\">\n          <artifact name=\"ssmschoolshop:war exploded\" />\n        </option>\n      </method>\n    </configuration>\n  </component>\n  <component name=\"SvnConfiguration\">\n    <configuration />\n  </component>\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"9cd26514-804c-4d9a-ba0d-82cef0d4b73b\" name=\"Default\" comment=\"\" />\n      <created>1557539578830</created>\n      <option name=\"number\" value=\"Default\" />\n      <option name=\"presentableId\" value=\"Default\" />\n      <updated>1557539578830</updated>\n      <workItem from=\"1557539582791\" duration=\"4822000\" />\n    </task>\n    <servers />\n  </component>\n  <component name=\"TimeTrackingManager\">\n    <option name=\"totallyTimeSpent\" value=\"4822000\" />\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"-8\" y=\"-8\" width=\"1382\" height=\"744\" extended-state=\"6\" />\n    <editor active=\"true\" />\n    <layout>\n      <window_info anchor=\"right\" id=\"Palette\" />\n      <window_info anchor=\"bottom\" id=\"Event Log\" sideWeight=\"0.50075644\" side_tool=\"true\" weight=\"0.12629758\" />\n      <window_info anchor=\"bottom\" id=\"Application Servers\" weight=\"0.4186851\" />\n      <window_info anchor=\"right\" id=\"Maven Projects\" />\n      <window_info anchor=\"bottom\" id=\"Database Changes\" show_stripe_button=\"false\" />\n      <window_info id=\"Capture Tool\" />\n      <window_info id=\"Designer\" />\n      <window_info anchor=\"right\" id=\"Database\" weight=\"0.32980332\" />\n      <window_info id=\"Structure\" order=\"1\" sideWeight=\"0.50209206\" side_tool=\"true\" weight=\"0.24962178\" />\n      <window_info anchor=\"right\" id=\"Ant Build\" order=\"1\" weight=\"0.25\" />\n      <window_info id=\"UI Designer\" />\n      <window_info anchor=\"bottom\" id=\"Debug\" order=\"3\" weight=\"0.4\" />\n      <window_info anchor=\"bottom\" id=\"TODO\" order=\"6\" />\n      <window_info anchor=\"bottom\" id=\"Messages\" sideWeight=\"0.49924356\" weight=\"0.44809687\" />\n      <window_info anchor=\"right\" id=\"Palette&#9;\" />\n      <window_info id=\"Image Layers\" />\n      <window_info anchor=\"bottom\" id=\"Java Enterprise\" />\n      <window_info anchor=\"right\" id=\"Capture Analysis\" />\n      <window_info anchor=\"bottom\" id=\"Version Control\" show_stripe_button=\"false\" />\n      <window_info anchor=\"bottom\" x=\"22\" y=\"207\" width=\"1322\" height=\"313\" id=\"Run\" order=\"2\" weight=\"0.26124567\" />\n      <window_info anchor=\"bottom\" id=\"Spring\" />\n      <window_info anchor=\"bottom\" id=\"Terminal\" />\n      <window_info content_ui=\"combo\" id=\"Project\" order=\"0\" sideWeight=\"0.49790794\" visible=\"true\" weight=\"0.24962178\" />\n      <window_info id=\"Web\" side_tool=\"true\" />\n      <window_info anchor=\"bottom\" id=\"Find\" order=\"1\" weight=\"0.32871974\" />\n      <window_info anchor=\"right\" id=\"Theme Preview\" />\n      <window_info id=\"Favorites\" side_tool=\"true\" />\n      <window_info anchor=\"right\" id=\"Commander\" internal_type=\"SLIDING\" order=\"0\" type=\"SLIDING\" weight=\"0.4\" />\n      <window_info anchor=\"bottom\" id=\"Inspection\" order=\"5\" weight=\"0.4\" />\n      <window_info anchor=\"right\" content_ui=\"combo\" id=\"Hierarchy\" order=\"2\" weight=\"0.25\" />\n      <window_info anchor=\"bottom\" id=\"Message\" order=\"0\" />\n      <window_info anchor=\"bottom\" id=\"Cvs\" order=\"4\" weight=\"0.25\" />\n    </layout>\n  </component>\n  <component name=\"TypeScriptGeneratedFilesManager\">\n    <option name=\"version\" value=\"1\" />\n  </component>\n  <component name=\"VcsContentAnnotationSettings\">\n    <option name=\"myLimit\" value=\"2678400000\" />\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/asd.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"186\">\n          <caret line=\"7\" column=\"6\" selection-start-line=\"7\" selection-start-column=\"6\" selection-end-line=\"7\" selection-end-column=\"6\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/pom.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1926\">\n          <caret line=\"140\" selection-start-line=\"140\" selection-end-line=\"140\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/web.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"214\">\n          <caret line=\"12\" column=\"39\" selection-start-line=\"12\" selection-start-column=\"39\" selection-end-line=\"12\" selection-end-column=\"39\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/test/java/com/neu/shop/mybatis/EnvTest.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/test/java/com/zhang/test/MBGTest.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-150\">\n          <caret line=\"22\" column=\"19\" selection-start-line=\"22\" selection-start-column=\"19\" selection-end-line=\"22\" selection-end-column=\"19\" />\n          <folding>\n            <element signature=\"imports\" expanded=\"true\" />\n            <element signature=\"e#245#253#0\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/index.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"84\">\n          <caret line=\"3\" column=\"7\" lean-forward=\"true\" selection-start-line=\"3\" selection-start-column=\"7\" selection-end-line=\"3\" selection-end-column=\"7\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/generatorConfig.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"224\">\n          <caret line=\"8\" lean-forward=\"true\" selection-start-line=\"8\" selection-end-line=\"8\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/mapper/ChatMapper.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/mapper/ActivityMapper.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"112\">\n          <caret line=\"3\" column=\"65\" lean-forward=\"true\" selection-start-line=\"3\" selection-start-column=\"65\" selection-end-line=\"3\" selection-end-column=\"65\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/entity/ChatExample.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/dao/ImagePathMapper.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/entity/CategoryExample.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/service/impl/ChatServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/dao/AdminMapper.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/entity/Deliver.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/entity/Category.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/entity/ActivityExample.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/service/impl/AddressServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-168\">\n          <caret line=\"13\" column=\"26\" lean-forward=\"true\" selection-start-line=\"13\" selection-start-column=\"26\" selection-end-line=\"13\" selection-end-column=\"26\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/util/verificate/Verificate.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"140\">\n          <caret line=\"10\" column=\"13\" selection-start-line=\"10\" selection-start-column=\"13\" selection-end-line=\"10\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/service/OrderService.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"146\">\n          <caret line=\"9\" column=\"17\" selection-start-line=\"9\" selection-start-column=\"17\" selection-end-line=\"9\" selection-end-column=\"17\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/controller/admin/AdminOrderController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-686\">\n          <caret line=\"49\" column=\"43\" selection-start-line=\"49\" selection-start-column=\"43\" selection-end-line=\"49\" selection-end-column=\"43\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/applicationContext.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"354\">\n          <caret line=\"55\" column=\"69\" selection-start-line=\"55\" selection-start-column=\"56\" selection-end-line=\"55\" selection-end-column=\"69\" />\n          <folding>\n            <element signature=\"e#1822#1839#0\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/dbconfig.properties\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"112\">\n          <caret line=\"4\" column=\"33\" selection-start-line=\"4\" selection-start-column=\"33\" selection-end-line=\"4\" selection-end-column=\"33\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"jar://$MAVEN_REPOSITORY$/com/github/pagehelper/pagehelper/5.0.3/pagehelper-5.0.3.jar!/com/github/pagehelper/PageInterceptor.class\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"178\">\n          <caret line=\"38\" column=\"13\" selection-start-line=\"38\" selection-start-column=\"13\" selection-end-line=\"38\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/mybatis-config.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"392\">\n          <caret line=\"14\" column=\"13\" selection-start-line=\"14\" selection-start-column=\"13\" selection-end-line=\"14\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/spring-mvc.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"56\">\n          <caret line=\"2\" column=\"57\" selection-start-line=\"2\" selection-start-column=\"57\" selection-end-line=\"2\" selection-end-column=\"57\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/mapper/AdminMapper.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-336\">\n          <caret line=\"2\" column=\"34\" selection-start-line=\"2\" selection-start-column=\"34\" selection-end-line=\"2\" selection-end-column=\"34\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/activity.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"91\">\n          <caret line=\"24\" column=\"16\" selection-start-line=\"24\" selection-start-column=\"12\" selection-end-line=\"24\" selection-end-column=\"16\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/addActivity.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"91\">\n          <caret line=\"27\" column=\"16\" selection-start-line=\"27\" selection-start-column=\"12\" selection-end-line=\"27\" selection-end-column=\"16\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/verificationcodeimg.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"53\">\n          <caret line=\"4\" column=\"12\" lean-forward=\"true\" selection-start-line=\"4\" selection-start-column=\"12\" selection-end-line=\"4\" selection-end-column=\"12\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/userManage.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-59\" />\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/sidebar.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-59\" />\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/search.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1677\">\n          <caret line=\"58\" column=\"167\" selection-start-line=\"58\" selection-start-column=\"167\" selection-end-line=\"58\" selection-end-column=\"167\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/register.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-59\" />\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/orderConfirm.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"2601\">\n          <caret line=\"85\" column=\"4\" selection-start-line=\"85\" selection-start-column=\"4\" selection-end-line=\"85\" selection-end-column=\"4\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/main.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"3199\">\n          <caret line=\"560\" column=\"96\" selection-start-line=\"560\" selection-start-column=\"96\" selection-end-line=\"560\" selection-end-column=\"96\" />\n          <folding>\n            <element signature=\"n#style#0;n#button#0;n#div#2;n#li#0;n#ul#0;n#div#0;n#div#1;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#button#1;n#div#2;n#li#0;n#ul#0;n#div#0;n#div#1;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#div#0;n#ul#0;n#div#0;n#div#1;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#button#0;n#div#2;n#li#0;n#ul#0;n#div#0;n#div#1;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#button#1;n#div#2;n#li#0;n#ul#0;n#div#0;n#div#1;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#div#0;n#ul#0;n#div#0;n#div#1;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/login.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-59\" />\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/list.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-59\" />\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/information.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state>\n          <caret lean-forward=\"true\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/header.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"109\">\n          <caret line=\"6\" lean-forward=\"true\" selection-start-line=\"6\" selection-end-line=\"6\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/goodsNav.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/frontChat.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/favorite.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/detail.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"5177\">\n          <caret line=\"184\" column=\"85\" selection-start-line=\"184\" selection-start-column=\"85\" selection-end-line=\"184\" selection-end-column=\"85\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/chat.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"71\">\n          <caret line=\"26\" column=\"7\" selection-start-line=\"26\" selection-start-column=\"7\" selection-end-line=\"26\" selection-end-column=\"7\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/chatrobot.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"252\">\n          <caret line=\"27\" column=\"22\" lean-forward=\"true\" selection-start-line=\"27\" selection-start-column=\"22\" selection-end-line=\"27\" selection-end-column=\"22\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$APPLICATION_CONFIG_DIR$/consoles/db/2c2b7821-8da1-495a-884a-0b2c51399650/console.sql\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\" />\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/resources/mapper/GoodsMapper.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1195\">\n          <caret line=\"240\" column=\"11\" lean-forward=\"true\" selection-start-line=\"240\" selection-start-column=\"11\" selection-end-line=\"240\" selection-end-column=\"11\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/js/shopcart.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-17\">\n          <caret line=\"122\" column=\"91\" lean-forward=\"true\" selection-start-line=\"122\" selection-start-column=\"91\" selection-end-line=\"122\" selection-end-column=\"91\" />\n          <folding>\n            <element signature=\"n#!!doc\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#div#0;n#td#0;n#tr#0;n#!!top\" expanded=\"true\" />\n            <element signature=\"n#style#0;n#a#0;n#div#0;n#td#0;n#tr#0;n#!!top\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/java/com/zhang/ssmschoolshop/dao/GoodsMapper.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"137\">\n          <caret line=\"19\" column=\"40\" selection-start-line=\"19\" selection-start-column=\"16\" selection-end-line=\"19\" selection-end-column=\"40\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/main/webapp/WEB-INF/views/shopcart.jsp\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"224\">\n          <caret line=\"15\" column=\"60\" selection-start-line=\"15\" selection-start-column=\"60\" selection-end-line=\"15\" selection-end-column=\"60\" />\n        </state>\n      </provider>\n    </entry>\n  </component>\n  <component name=\"masterDetails\">\n    <states>\n      <state key=\"ArtifactsStructureConfigurable.UI\">\n        <settings>\n          <artifact-editor />\n          <last-edited>ssmschoolshop:war</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n                <option value=\"0.5\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"FacetStructureConfigurable.UI\">\n        <settings>\n          <last-edited>Spring</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"GlobalLibrariesConfigurable.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"JdkListConfigurable.UI\">\n        <settings>\n          <last-edited>1.8</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ModuleStructureConfigurable.UI\">\n        <settings>\n          <last-edited>ssmschoolshop</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n                <option value=\"0.6\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectJDKs.UI\">\n        <settings>\n          <last-edited>1.8</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectLibrariesConfigurable.UI\">\n        <settings>\n          <last-edited>Maven: c3p0:c3p0:0.9.1</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n    </states>\n  </component>\n</project>"
  },
  {
    "path": "ssmschoolshop/generatorConfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE generatorConfiguration\n        PUBLIC \"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN\"\n        \"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd\">\n\n<generatorConfiguration>\n\n    <context id=\"DB2Tables\" targetRuntime=\"MyBatis3\">\n\n        <commentGenerator>\n            <property name=\"suppressAllComments\" value=\"true\" />\n        </commentGenerator>\n\n        <!--配置数据库连接信息-->\n        <jdbcConnection driverClass=\"com.mysql.jdbc.Driver\"\n                        connectionURL=\"jdbc:mysql://localhost:3306/db_shopmaster?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull\"\n                        userId=\"root\"\n                        password=\"123456\">\n        </jdbcConnection>\n\n        <javaTypeResolver >\n            <property name=\"forceBigDecimals\" value=\"false\" />\n        </javaTypeResolver>\n\n        <javaModelGenerator targetPackage=\"com.zhang.ssmschoolshop.entity\" targetProject=\".\\src\\main\\java\">\n            <property name=\"enableSubPackages\" value=\"true\" />\n            <property name=\"trimStrings\" value=\"true\" />\n        </javaModelGenerator>\n\n        <!--xml-->\n        <sqlMapGenerator targetPackage=\"mapper\"  targetProject=\".\\src\\main\\resources\">\n            <property name=\"enableSubPackages\" value=\"true\" />\n        </sqlMapGenerator>\n\n        <!--dao接口-->\n        <javaClientGenerator type=\"XMLMAPPER\" targetPackage=\"com.zhang.ssmschoolshop.dao\"  targetProject=\".\\src\\main\\java\">\n            <property name=\"enableSubPackages\" value=\"true\" />\n        </javaClientGenerator>\n\n        <!--指定哪个表的生成策略-->\n        <table tableName=\"indent\" domainObjectName=\"Order\" ></table>\n    </context>\n</generatorConfiguration>\n"
  },
  {
    "path": "ssmschoolshop/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\r\n  <modelVersion>4.0.0</modelVersion>\r\n\r\n  <groupId>com.zhang</groupId>\r\n  <artifactId>ssmschoolshop</artifactId>\r\n  <version>1.0-SNAPSHOT</version>\r\n  <packaging>war</packaging>\r\n\r\n  <name>ssmschoolshop Maven Webapp</name>\r\n  <!-- FIXME change it to the project's website -->\r\n  <url>http://www.example.com</url>\r\n\r\n  <properties>\r\n    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\r\n    <maven.compiler.source>1.7</maven.compiler.source>\r\n    <maven.compiler.target>1.7</maven.compiler.target>\r\n  </properties>\r\n\r\n  <dependencies>\r\n    <dependency>\r\n      <groupId>junit</groupId>\r\n      <artifactId>junit</artifactId>\r\n      <version>4.12</version>\r\n      <scope>test</scope>\r\n    </dependency>\r\n\r\n    <!--mybatis generator-->\r\n    <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->\r\n    <dependency>\r\n      <groupId>org.mybatis.generator</groupId>\r\n      <artifactId>mybatis-generator-core</artifactId>\r\n      <version>1.3.5</version>\r\n    </dependency>\r\n\r\n\r\n    <!-- SpringMVC、Spring -->\r\n    <dependency>\r\n      <groupId>org.springframework</groupId>\r\n      <artifactId>spring-webmvc</artifactId>\r\n      <version>4.3.9.RELEASE</version>\r\n    </dependency>\r\n\r\n    <!--Spring jdbc-->\r\n    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->\r\n    <dependency>\r\n      <groupId>org.springframework</groupId>\r\n      <artifactId>spring-jdbc</artifactId>\r\n      <version>4.3.9.RELEASE</version>\r\n    </dependency>\r\n\r\n    <!--Spring-test-->\r\n    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->\r\n    <dependency>\r\n      <groupId>org.springframework</groupId>\r\n      <artifactId>spring-test</artifactId>\r\n      <version>4.3.9.RELEASE</version>\r\n      <scope>test</scope>\r\n    </dependency>\r\n\r\n\r\n    <!--Spring 面向切面编程-->\r\n    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->\r\n    <dependency>\r\n      <groupId>org.springframework</groupId>\r\n      <artifactId>spring-aspects</artifactId>\r\n      <version>4.3.9.RELEASE</version>\r\n    </dependency>\r\n\r\n    <!--MyBatis-->\r\n    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->\r\n    <dependency>\r\n      <groupId>org.mybatis</groupId>\r\n      <artifactId>mybatis</artifactId>\r\n      <version>3.5.6</version>\r\n    </dependency>\r\n\r\n    <!--MyBatis整合Spring的jar包-->\r\n    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->\r\n    <dependency>\r\n      <groupId>org.mybatis</groupId>\r\n      <artifactId>mybatis-spring</artifactId>\r\n      <version>1.3.1</version>\r\n    </dependency>\r\n\r\n    <!--数据库连接池、驱动-->\r\n    <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->\r\n    <dependency>\r\n      <groupId>c3p0</groupId>\r\n      <artifactId>c3p0</artifactId>\r\n      <version>0.9.1</version>\r\n    </dependency>\r\n\r\n    <!--MySql-->\r\n    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->\r\n    <dependency>\r\n      <groupId>mysql</groupId>\r\n      <artifactId>mysql-connector-java</artifactId>\r\n      <version>5.1.29</version>\r\n    </dependency>\r\n\r\n    <!--jstl、servlet-api、-->\r\n    <!-- https://mvnrepository.com/artifact/jstl/jstl -->\r\n    <dependency>\r\n      <groupId>jstl</groupId>\r\n      <artifactId>jstl</artifactId>\r\n      <version>1.2</version>\r\n    </dependency>\r\n    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->\r\n    <dependency>\r\n      <groupId>javax.servlet</groupId>\r\n      <artifactId>javax.servlet-api</artifactId>\r\n      <version>3.1.0</version>\r\n      <scope>provided</scope>\r\n    </dependency>\r\n\r\n    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->\r\n    <dependency>\r\n      <groupId>javax.servlet.jsp</groupId>\r\n      <artifactId>jsp-api</artifactId>\r\n      <version>2.2</version>\r\n      <scope>provided</scope>\r\n    </dependency>\r\n\r\n    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->\r\n    <dependency>\r\n      <groupId>commons-fileupload</groupId>\r\n      <artifactId>commons-fileupload</artifactId>\r\n      <version>1.3.3</version>\r\n    </dependency>\r\n\r\n\r\n    <!--https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-->\r\n    <dependency>\r\n      <groupId>com.github.pagehelper</groupId>\r\n      <artifactId>pagehelper</artifactId>\r\n      <version>5.0.3</version>\r\n    </dependency>\r\n\r\n    <!--返回json字符串-->\r\n    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->\r\n    <dependency>\r\n      <groupId>com.fasterxml.jackson.core</groupId>\r\n      <artifactId>jackson-databind</artifactId>\r\n      <version>2.8.9</version>\r\n    </dependency>\r\n  </dependencies>\r\n\r\n  <build>\r\n    <finalName>ssmschoolshop</finalName>\r\n    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->\r\n      <plugins>\r\n        <plugin>\r\n          <artifactId>maven-clean-plugin</artifactId>\r\n          <version>3.1.0</version>\r\n        </plugin>\r\n        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->\r\n        <plugin>\r\n          <artifactId>maven-resources-plugin</artifactId>\r\n          <version>3.0.2</version>\r\n        </plugin>\r\n        <plugin>\r\n          <artifactId>maven-compiler-plugin</artifactId>\r\n          <version>3.8.0</version>\r\n        </plugin>\r\n        <plugin>\r\n          <artifactId>maven-surefire-plugin</artifactId>\r\n          <version>2.22.1</version>\r\n        </plugin>\r\n        <plugin>\r\n          <artifactId>maven-war-plugin</artifactId>\r\n          <version>3.2.2</version>\r\n        </plugin>\r\n        <plugin>\r\n          <artifactId>maven-install-plugin</artifactId>\r\n          <version>2.5.2</version>\r\n        </plugin>\r\n        <plugin>\r\n          <artifactId>maven-deploy-plugin</artifactId>\r\n          <version>2.8.2</version>\r\n        </plugin>\r\n      </plugins>\r\n    </pluginManagement>\r\n  </build>\r\n</project>\r\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/asd.java",
    "content": "package com.zhang.ssmschoolshop;\r\n\r\n/**\r\n * @author created by CodingZhangxin\r\n * @version v.0.1\r\n * @Description TODO\r\n * @date 2019/5/11\r\n * @备注\r\n **/\r\npublic class asd {\r\n}\r\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/admin/ActivityController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.entity.Goods;\nimport com.zhang.ssmschoolshop.service.ActivityService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.List;\n\n@Controller\n@RequestMapping(\"/admin/activity\")\npublic class ActivityController {\n\n    @Autowired(required = false)\n    ActivityService activityService;\n\n    @Autowired(required = false)\n    GoodsService goodsService;\n\n    @RequestMapping(\"/show\")\n    public String showActivity(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, Model model, HttpSession session) {\n\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 10);\n\n        ActivityExample activityExample = new ActivityExample();\n        activityExample.or();\n\n        List<Activity> activityList = activityService.getAllActivity(activityExample);\n\n        //显示几个页号\n        PageInfo page = new PageInfo(activityList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"activity\";\n    }\n\n    @RequestMapping(\"/showjson\")\n    @ResponseBody\n    public Msg showActivityJson(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, Model model , HttpSession session) {\n\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n\n        ActivityExample activityExample = new ActivityExample();\n        activityExample.or();\n\n        List<Activity> activityList = activityService.getAllActivity(activityExample);\n\n        return Msg.success(\"获取活动信息成功\").add(\"activity\",activityList);\n    }\n\n    @RequestMapping(\"/add\")\n    public String showAddActivity(HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        return \"addActivity\";\n    }\n\n    @RequestMapping(\"/addResult\")\n    public String addActivity(Activity activity) {\n\n        activityService.insertActivitySelective(activity);\n\n        return \"redirect:/admin/activity/show\";\n    }\n\n    @RequestMapping(\"/update\")\n    @ResponseBody\n    public Msg updateActivity(Integer goodsid, Integer activityid, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        Goods goods = new Goods();\n        goods.setActivityid(activityid);\n        goods.setGoodsid(goodsid);\n        goodsService.updateGoodsById(goods);\n        return Msg.success(\"更新商品活动成功\");\n    }\n\n    @RequestMapping(\"delete\")\n    public String deleteActivity(Integer activityid, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        activityService.deleteByActivityId(activityid);\n        return \"redirect:/admin/activity/show\";\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/admin/AdminOrderController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.service.OrderService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Controller\n@RequestMapping(\"/admin/order\")\npublic class AdminOrderController {\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/send\")\n    public String sendOrder(@RequestParam(value = \"page\",defaultValue = \"1\")Integer pn, Model model, HttpSession session) {\n\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 2);\n\n        //查询未发货订单\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andIssendEqualTo(false);\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        model.addAttribute(\"sendOrder\", orderList);\n\n        //查询该订单中的商品\n        for (int i = 0; i < orderList.size(); i++) {\n            //获取订单项中的goodsid\n            Order order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            List<OrderItem> orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Integer> goodsIdList = new ArrayList<>();\n\n            List<Goods> goodsList = new ArrayList<>();\n            for (OrderItem orderItem : orderItemList) {\n//                goodsIdList.add(orderItem.getGoodsid());\n                Goods goods = goodsService.selectById(orderItem.getGoodsid());\n                goods.setNum(orderItem.getNum());\n                goodsList.add(goods);\n            }\n\n            //根据goodsid查询商品\n            /*GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            List<Goods> goodsList = goodsService.selectByExample(goodsExample);*/\n            order.setGoodsInfo(goodsList);\n\n            //查询地址\n            Address address = orderService.getAddressByKey(order.getAddressid());\n            order.setAddress(address);\n\n            orderList.set(i, order);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(orderList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"adminAllOrder\";\n    }\n\n    @RequestMapping(\"/sendGoods\")\n    public String sendGoods(Integer orderid, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        Order order = new Order();\n        order.setOrderid(orderid);\n        order.setIssend(true);\n        orderService.updateOrderByKey(order);\n        return \"redirect:/admin/order/send\";\n    }\n\n    @RequestMapping(\"/receiver\")\n    public String receiveOrder(@RequestParam(value = \"page\",defaultValue = \"1\")Integer pn, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        //一页显示几个数据\n        PageHelper.startPage(pn, 2);\n\n        //查询未收货订单\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andIssendEqualTo(true).andIsreceiveEqualTo(false);\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        model.addAttribute(\"sendOrder\", orderList);\n\n        //查询该订单中的商品\n        for (int i = 0; i < orderList.size(); i++) {\n            //获取订单项中的goodsid\n            Order order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            List<OrderItem> orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Integer> goodsIdList = new ArrayList<>();\n            /*for (OrderItem orderItem : orderItemList) {\n                goodsIdList.add(orderItem.getGoodsid());\n            }\n*/\n            List<Goods> goodsList = new ArrayList<>();\n            for (OrderItem orderItem : orderItemList) {\n//                goodsIdList.add(orderItem.getGoodsid());\n                Goods goods = goodsService.selectById(orderItem.getGoodsid());\n                goods.setNum(orderItem.getNum());\n                goodsList.add(goods);\n            }\n            //根据goodsid查询商品\n           /* GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            List<Goods> goodsList = goodsService.selectByExample(goodsExample);*/\n            order.setGoodsInfo(goodsList);\n\n            //查询地址\n            Address address = orderService.getAddressByKey(order.getAddressid());\n            order.setAddress(address);\n\n            orderList.set(i, order);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(orderList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"adminOrderReceive\";\n    }\n\n    @RequestMapping(\"/complete\")\n    public String completeOrder(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        //一页显示几个数据\n        PageHelper.startPage(pn, 2);\n\n        //查询已完成订单\n        OrderExample orderExample = new OrderExample();\n        orderExample.or().andIssendEqualTo(true).andIsreceiveEqualTo(true).andIscompleteEqualTo(true);\n        List<Order> orderList = orderService.selectOrderByExample(orderExample);\n        model.addAttribute(\"sendOrder\", orderList);\n\n        //查询该订单中的商品\n        for (int i = 0; i < orderList.size(); i++) {\n            //获取订单项中的goodsid\n            Order order = orderList.get(i);\n            OrderItemExample orderItemExample = new OrderItemExample();\n            orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n            List<OrderItem> orderItemList = orderService.getOrderItemByExample(orderItemExample);\n            List<Integer> goodsIdList = new ArrayList<>();\n            /*for (OrderItem orderItem : orderItemList) {\n                goodsIdList.add(orderItem.getGoodsid());\n            }*/\n\n            List<Goods> goodsList = new ArrayList<>();\n            for (OrderItem orderItem : orderItemList) {\n//                goodsIdList.add(orderItem.getGoodsid());\n                Goods goods = goodsService.selectById(orderItem.getGoodsid());\n                goods.setNum(orderItem.getNum());\n                goodsList.add(goods);\n            }\n\n            //根据goodsid查询商品\n            /*GoodsExample goodsExample = new GoodsExample();\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            List<Goods> goodsList = goodsService.selectByExample(goodsExample);*/\n            order.setGoodsInfo(goodsList);\n\n            //查询地址\n            Address address = orderService.getAddressByKey(order.getAddressid());\n            order.setAddress(address);\n\n            orderList.set(i, order);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(orderList, 5);\n        model.addAttribute(\"pageInfo\", page);\n        return \"adminOrderComplete\";\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/admin/GoodsController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.CateService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.util.ImageUtil;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.web.multipart.MultipartFile;\nimport org.springframework.web.servlet.mvc.support.RedirectAttributes;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n\n@Controller\n@RequestMapping(\"/admin/goods\")\npublic class GoodsController {\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/showjson\")\n    @ResponseBody\n    public Msg getAllGoods(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, HttpServletResponse response, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        //一页显示几个数据\n        PageHelper.startPage(pn, 10);\n\n        List<Goods> employees = goodsService.selectByExample(new GoodsExample());\n\n        //显示几个页号\n        PageInfo page = new PageInfo(employees, 5);\n\n        model.addAttribute(\"pageInfo\", page);\n\n        return Msg.success(\"查询成功!\").add(\"pageInfo\", page);\n    }\n\n    @RequestMapping(\"/show\")\n    public String goodsManage(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pn, HttpServletResponse response, Model model, HttpSession session) throws IOException {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        /*//一页显示几个数据\n        PageHelper.startPage(pn, 10);\n        List<Goods> employees = goodsService.selectByExample(new GoodsExample());\n        //显示几个页号\n        PageInfo page = new PageInfo(employees,5);\n        model.addAttribute(\"pageInfo\", page);*/\n        List<Category> categoryList = cateService.selectByExample(new CategoryExample());\n        model.addAttribute(\"categoryList\", categoryList);\n\n        return \"adminAllGoods\";\n    }\n\n    @RequestMapping(\"/add\")\n    public String showAdd(@ModelAttribute(\"succeseMsg\") String msg, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        if (!msg.equals(\"\")) {\n            model.addAttribute(\"msg\", msg);\n        }\n\n        List<Category> categoryList = cateService.selectByExample(new CategoryExample());\n        model.addAttribute(\"categoryList\", categoryList);\n\n\n        //还需要查询分类传给addGoods页面\n        return \"addGoods\";\n    }\n\n    @RequestMapping(value = \"/update\", method = RequestMethod.POST)\n    @ResponseBody\n    public Msg updateGoods(Goods goods, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        /* goods.setGoodsid(goodsid);*/\n        goodsService.updateGoodsById(goods);\n        return Msg.success(\"更新成功!\");\n    }\n\n    @RequestMapping(value = \"/delete/{goodsid}\", method = RequestMethod.DELETE)\n    @ResponseBody\n    public Msg deleteGoods(@PathVariable(\"goodsid\") Integer goodsid) {\n        goodsService.deleteGoodsById(goodsid);\n        return Msg.success(\"删除成功!\");\n    }\n\n    @RequestMapping(\"/addGoodsSuccess\")\n    public String addGoods(Goods goods,\n                           @RequestParam MultipartFile[] fileToUpload,\n                           HttpServletRequest request,\n                           HttpServletResponse response,\n                           RedirectAttributes redirectAttributes) throws IOException {\n        /*goods.setCategory(1);*/\n        goods.setUptime(new Date());\n        goods.setActivityid(1);\n        goodsService.addGoods(goods);\n        for (MultipartFile multipartFile : fileToUpload) {\n            String fileName = goods.getGoodsname()+ multipartFile.getOriginalFilename();\n            if (multipartFile != null) {\n               String ImagePath= ImageUtil.imagePath(multipartFile,fileName);\n               System.out.println(\"最后存入数据的图片名字为:\"+ImagePath);\n                //把图片路径存入数据库中\n              goodsService.addImagePath(new ImagePath(null, goods.getGoodsid(), ImagePath));\n\n            }\n        }\n\n        redirectAttributes.addFlashAttribute(\"succeseMsg\", \"商品添加成功!\");\n\n        return \"redirect:/admin/goods/add\";\n    }\n\n    @RequestMapping(\"/addCategory\")\n    public String addcategory(@ModelAttribute(\"succeseMsg\") String msg, Model model, HttpSession session) {\n        Admin admin = (Admin) session.getAttribute(\"admin\");\n        if (admin == null) {\n            return \"redirect:/admin/login\";\n        }\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or();\n        List<Category> categoryList;\n        categoryList = cateService.selectByExample(categoryExample);\n        model.addAttribute(\"categoryList\", categoryList);\n        if (!msg.equals(\"\")) {\n            model.addAttribute(\"msg\", msg);\n        }\n        return \"addCategory\";\n    }\n\n    @Autowired\n    private CateService cateService;\n\n    @RequestMapping(\"/addCategoryResult\")\n    public String addCategoryResult(Category category, Model addCategoryResult, RedirectAttributes redirectAttributes) {\n        List<Category> categoryList = new ArrayList<>();\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or().andCatenameEqualTo(category.getCatename());\n        categoryList = cateService.selectByExample(categoryExample);\n        if (!categoryList.isEmpty()) {\n            redirectAttributes.addAttribute(\"succeseMsg\", \"分类已存在\");\n            return \"redirect:/admin/goods/addCategory\";\n        } else {\n            cateService.insertSelective(category);\n            redirectAttributes.addFlashAttribute(\"succeseMsg\", \"分类添加成功!\");\n            return \"redirect:/admin/goods/addCategory\";\n        }\n    }\n\n    @RequestMapping(\"/saveCate\")\n    @ResponseBody\n    public Msg saveCate(Category category) {\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or().andCatenameEqualTo(category.getCatename());\n        List<Category> categoryList = cateService.selectByExample(categoryExample);\n        if (categoryList.isEmpty()) {\n            cateService.updateByPrimaryKeySelective(category);\n            return Msg.success(\"更新成功\");\n        } else return Msg.success(\"名字已经存在\");\n    }\n\n    @RequestMapping(\"/deleteCate\")\n    @ResponseBody\n    public Msg deleteCate(Category category) {\n        cateService.deleteByPrimaryKey(category.getCateid());\n        return Msg.success(\"删除成功\");\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/admin/LoginController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\n\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.service.AdminService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\n\n@Controller\n@RequestMapping(\"/admin\")\npublic class LoginController {\n\n    @Autowired\n    private AdminService adminService;\n\n    @RequestMapping(\"/login\")\n    public String adminLogin() {\n        return \"adminLogin\";\n    }\n\n    @RequestMapping(\"/confirmLogin\")\n    public String confirmLogin(Admin admin, Model model, HttpServletRequest request) {\n        Admin selectAdmin = adminService.selectByName(admin);\n        if (selectAdmin == null) {\n            model.addAttribute(\"errorMsg\", \"用户名或密码错误\");\n            return \"adminLogin\";\n        } else {\n            HttpSession session = request.getSession();\n            session.setAttribute(\"admin\", selectAdmin);\n            return \"redirect:/admin/user/show\";\n        }\n    }\n\n    @RequestMapping(\"/logout\")\n    public String adminLogout(HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        session.removeAttribute(\"admin\");\n        return \"redirect:/admin/login\";\n    }\n\n    /*@RequestMapping(\"/index\")\n    public String showAdminIndex() {\n        return \"user\";\n    }*/\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/admin/UserController.java",
    "content": "package com.zhang.ssmschoolshop.controller.admin;\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.servlet.http.HttpServletResponse;\nimport java.util.List;\n\n\n@Controller\n@RequestMapping(\"/admin/user\")\npublic class UserController {\n\n    @Autowired\n    private UserService userService;\n\n    @RequestMapping(\"/showjson\")\n    @ResponseBody\n    public Msg getAllGoods(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, HttpServletResponse response, Model model) {\n        //一页显示几个数据\n        PageHelper.startPage(pn, 10);\n\n        List<User> userList = userService.selectByExample(new UserExample());\n\n        //显示几个页号\n        PageInfo page = new PageInfo(userList,5);\n\n       /* model.addAttribute(\"pageInfo\", page);*/\n\n        return Msg.success(\"查询成功!\").add(\"pageInfo\", page);\n    }\n\n    @RequestMapping(\"/show\")\n    public String userManage() {\n        return \"userManage\";\n    }\n\n    @RequestMapping(value = \"/delete/{userid}\", method = RequestMethod.DELETE)\n    @ResponseBody\n    public Msg deleteUser(@PathVariable(\"userid\")Integer userid) {\n//        goodsService.deleteGoodsById(goodsid);\n        userService.deleteUserById(userid);\n        return Msg.success(\"删除成功!\");\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/CartController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.service.ShopCartService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n@Controller\npublic class CartController {\n\n    @Autowired\n    private ShopCartService shopCartService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/addCart\")\n    public String addCart(ShopCart shopCart, HttpServletRequest request) {\n        HttpSession session = request.getSession();\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return \"redirect:/login\";\n        }\n\n        //判断是否已经加入购物车\n        ShopCart shopCart1 = shopCartService.selectCartByKey(new ShopCartKey(user.getUserid(), shopCart.getGoodsid()));\n        if (shopCart1 != null) {\n            return \"redirect:/showcart\";\n        }\n\n        //用户\n        shopCart.setUserid(user.getUserid());\n\n        //加入时间\n        shopCart.setCatedate(new Date());\n\n        shopCartService.addShopCart(shopCart);\n\n        //返回到购物车页面\n        return \"redirect:/showcart\";\n    }\n\n    @RequestMapping(\"/showcart\")\n    public String showCart(HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return \"redirect:/login\";\n        }\n        return \"shopcart\";\n    }\n\n    @RequestMapping(\"/cartjson\")\n    @ResponseBody\n    public Msg getCart(HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"请先登录\");\n        }\n\n        //获取当前用户的购物车信息\n        ShopCartExample shopCartExample = new ShopCartExample();\n        shopCartExample.or().andUseridEqualTo(user.getUserid());\n        List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);\n\n        //获取购物车中的商品信息\n        List<Goods> goodsAndImage = new ArrayList<>();\n        for (ShopCart cart:shopCart) {\n            Goods goods = goodsService.selectById(cart.getGoodsid());\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n            goods.setImagePaths(imagePathList);\n            goods.setNum(cart.getGoodsnum());\n            goodsAndImage.add(goods);\n        }\n\n        return Msg.success(\"查询成功\").add(\"shopcart\",goodsAndImage);\n    }\n\n    @RequestMapping(value = \"/deleteCart/{goodsid}\", method = RequestMethod.DELETE)\n    @ResponseBody\n    public Msg deleteCart(@PathVariable(\"goodsid\")Integer goodsid, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"请先登录\");\n        }\n\n        shopCartService.deleteByKey(new ShopCartKey(user.getUserid(), goodsid));\n        return Msg.success(\"删除成功\");\n    }\n\n    @RequestMapping(\"/update\")\n    @ResponseBody\n    public Msg updateCart(Integer goodsid, Integer num, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        ShopCart shopCart = new ShopCart();\n        shopCart.setUserid(user.getUserid());\n        shopCart.setGoodsid(goodsid);\n        shopCart.setGoodsnum(num);\n        shopCartService.updateCartByKey(shopCart);\n        return Msg.success(\"更新购物车成功\");\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/ChatController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.ChatService;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n@Controller\npublic class ChatController {\n\n    @Autowired\n    ChatService chatService;\n\n    @Autowired\n    UserService userService;\n\n    @RequestMapping(\"/chat\")\n    public String showChat(HttpSession session, Model model, Integer sendto) {\n        User loginuser = (User) session.getAttribute(\"user\");\n        if (loginuser == null) {\n            return \"redirect:/login\";\n        }\n        /*//查询历史消息聊天对象\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n        ChatExample chatExample = new ChatExample();\n        chatExample.or().andReceiveuserEqualTo(user.getUserid());\n//        chatExample.or().andSenduserEqualTo(user.getUserid());\n//        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList1 = chatService.selectChatByExample(chatExample);\n\n        ChatExample chatExample2 = new ChatExample();\n//        chatExample.or().andReceiveuserEqualTo(user.getUserid());\n        chatExample2.or().andSenduserEqualTo(user.getUserid());\n//        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList2 = chatService.selectChatByExample(chatExample2);\n\n        //获取userid列表\n        List<Integer> useridList = new ArrayList<>();\n        for (Chat chat : chatList1) {\n            useridList.add(chat.getSenduser());\n        }\n        for (Chat chat : chatList2) {\n            useridList.add(chat.getReceiveuser());\n        }\n\n        //获取用户信息\n        UserExample userExample = new UserExample();\n        userExample.or().andUseridIn(useridList);\n        List<User> userList = userService.selectByExample(userExample);\n        model.addAttribute(\"chatuserlist\", userList);*/\n\n        if (sendto != null) {\n            User user = userService.selectByPrimaryKey(sendto);\n            model.addAttribute(\"sendto\", user);\n        }\n        return \"chat\";\n    }\n\n\n    @RequestMapping(\"/chatto\")\n    @ResponseBody\n    public Msg getChatTo(HttpSession session, Model model, Integer sendto) {\n        //查询历史消息聊天对象\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return Msg.fail(\"未登录\");\n        }\n        ChatExample chatExample = new ChatExample();\n        chatExample.or().andReceiveuserEqualTo(user.getUserid());\n//        chatExample.or().andSenduserEqualTo(user.getUserid());\n//        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList1 = chatService.selectChatByExample(chatExample);\n\n        ChatExample chatExample2 = new ChatExample();\n//        chatExample.or().andReceiveuserEqualTo(user.getUserid());\n        chatExample2.or().andSenduserEqualTo(user.getUserid());\n//        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList2 = chatService.selectChatByExample(chatExample2);\n\n        //获取userid列表\n        List<Integer> useridList = new ArrayList<>();\n        for (Chat chat : chatList1) {\n            useridList.add(chat.getSenduser());\n        }\n        for (Chat chat : chatList2) {\n            useridList.add(chat.getReceiveuser());\n        }\n\n        if (sendto != null) {\n            useridList.add(sendto);\n        }\n\n        //获取用户信息\n        UserExample userExample = new UserExample();\n        userExample.or().andUseridIn(useridList);\n        List<User> userList = userService.selectByExample(userExample);\n\n        return Msg.success(\"获取聊天列表成功\").add(\"userlist\",userList);\n    }\n\n\n    @RequestMapping(\"/getMessage\")\n    @ResponseBody\n    public Msg getMessageInfo(Integer senduser, Integer receiveuser, HttpSession session) {\n\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return Msg.fail(\"未登录\");\n        }\n\n        ChatExample chatExample = new ChatExample();\n        chatExample.or().andReceiveuserEqualTo(senduser).andSenduserEqualTo(receiveuser);\n        chatExample.or().andSenduserEqualTo(senduser).andReceiveuserEqualTo(receiveuser);\n        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList = chatService.selectChatByExample(chatExample);\n\n        return Msg.success(\"获取消息成功\").add(\"message\", chatList);\n    }\n\n    @RequestMapping(\"/admin/chat\")\n    public String frontChat(Integer sendto, Model model, HttpSession session) {\n\n        Admin adminuser = (Admin) session.getAttribute(\"admin\");\n        if (adminuser == null) {\n            return \"redirect:/admin/login\";\n        }\n\n        if (sendto != null) {\n            User user = userService.selectByPrimaryKey(sendto);\n            model.addAttribute(\"sendto\", user);\n        }\n        return \"adminChat\";\n    }\n\n    @RequestMapping(\"/adminchat\")\n    @ResponseBody\n    public Msg adminChat(HttpSession session, Model model, Integer sendto) {\n\n        //查询历史消息聊天对象\n        Admin adminuser = (Admin) session.getAttribute(\"admin\");\n        if (adminuser == null) {\n            return Msg.fail(\"请先登录\");\n        }\n        Integer userid = 5;\n        ChatExample chatExample = new ChatExample();\n        chatExample.or().andReceiveuserEqualTo(userid);\n//        chatExample.or().andSenduserEqualTo(user.getUserid());\n//        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList1 = chatService.selectChatByExample(chatExample);\n\n        ChatExample chatExample2 = new ChatExample();\n//        chatExample.or().andReceiveuserEqualTo(user.getUserid());\n        chatExample2.or().andSenduserEqualTo(userid);\n//        chatExample.setOrderByClause(\"MsgTime asc\");\n        List<Chat> chatList2 = chatService.selectChatByExample(chatExample2);\n\n        //获取userid列表\n        List<Integer> useridList = new ArrayList<>();\n        for (Chat chat : chatList1) {\n            useridList.add(chat.getSenduser());\n        }\n        for (Chat chat : chatList2) {\n            useridList.add(chat.getReceiveuser());\n        }\n\n        if (sendto != null) {\n            useridList.add(sendto);\n        }\n\n        //获取用户信息\n        UserExample userExample = new UserExample();\n        userExample.or().andUseridIn(useridList);\n        List<User> userList = userService.selectByExample(userExample);\n//        model.addAttribute(\"chatuserlist\", userList);\n        return Msg.success(\"获取列表成功\").add(\"userlist\",userList);\n    }\n\n    @RequestMapping(\"/sendMessage\")\n    @ResponseBody\n    public Msg saveMessage(Chat chat) {\n//        System.out.println(chat.getMsgcontent());\n        chat.setMsgtime(new Date());\n        chatService.insertChatSelective(chat);\n        return Msg.success(\"保存成功\");\n    }\n\n    @RequestMapping(\"/chatrobot\")\n    public String showChatRobot() {\n        return \"chatrobot\";\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/CustomerController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.AddressService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport com.zhang.ssmschoolshop.service.OrderService;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n@Controller\npublic class CustomerController {\n\n    @RequestMapping(\"/login\")\n    public String loginView(){\n        return \"login\";\n    }\n\n    @Autowired\n    private UserService userService;\n\n    @RequestMapping(\"/register\")\n    public String register(){\n        return \"register\";\n    }\n\n    @RequestMapping(\"/registerresult\")\n    public String registerResult(User user, Model registerResult){\n        List<User> userList=new ArrayList<>();\n        UserExample userExample=new UserExample();\n        userExample.or().andUsernameLike(user.getUsername());\n        userList=userService.selectByExample(userExample);\n        if (!userList.isEmpty())\n        {\n            registerResult.addAttribute(\"errorMsg\",\"用户名被占用\");\n            return \"register\";\n        }\n        else {\n            Date RegTime=new Date();\n            user.setRegtime(RegTime);\n            userService.insertSelective(user);\n            return  \"redirect:/login\";\n        }\n    }\n\n\n    @RequestMapping(\"/loginconfirm\")\n    public String loginConfirm(User user, Model loginResult, HttpServletRequest request, @RequestParam(\"confirmlogo\") String confirmlogo){\n        HttpSession session=request.getSession();\n        String verificationCode = (String) session.getAttribute(\"certCode\");\n        if (!confirmlogo.equals(verificationCode))\n        {\n            loginResult.addAttribute(\"errorMsg\",\"验证码错误\");\n            return \"login\";\n\n        }\n        List<User> userList=new ArrayList<User>();\n        UserExample userExample=new UserExample();\n        userExample.or().andUsernameEqualTo(user.getUsername()).andPasswordEqualTo(user.getPassword());\n        userList=userService.selectByExample(userExample);\n        if (!userList.isEmpty())\n        {\n            session.setAttribute(\"user\",userList.get(0));\n            return \"redirect:/main\";\n        }\n        else {\n            loginResult.addAttribute(\"errorMsg\",\"用户名与密码不匹配\");\n            return \"login\";\n        }\n    }\n\n    @RequestMapping(\"/information\")\n    public String information(Model userModel, HttpServletRequest request){\n        HttpSession session=request.getSession();\n        User user;\n        Integer userId;\n        user=(User) session.getAttribute(\"user\");\n        if (user==null)\n        {\n            return \"redirect:/login\";\n        }\n        userId=user.getUserid();\n        user=userService.selectByPrimaryKey(userId);\n        userModel.addAttribute(\"user\",user);\n        return \"information\";\n    }\n\n    @RequestMapping(\"/saveInfo\")\n    @ResponseBody\n    public Msg saveInfo(String name, String email, String telephone, HttpServletRequest request){\n        HttpSession session=request.getSession();\n        UserExample userExample=new UserExample();\n        User user,updateUser=new User();\n        List<User> userList=new ArrayList<>();\n        Integer userid;\n        user=(User)session.getAttribute(\"user\");\n        userid= user.getUserid();\n        userExample.or().andUsernameEqualTo(name);\n        userList=userService.selectByExample(userExample);\n        if (userList.isEmpty())\n        {\n            updateUser.setUserid(userid);\n            updateUser.setUsername(name);\n            updateUser.setEmail(email);\n            updateUser.setTelephone(telephone);\n            userService.updateByPrimaryKeySelective(updateUser);\n            return Msg.success(\"更新成功\");\n        }\n        else  {return Msg.fail(\"更新失败\");}\n    }\n\n    @Autowired\n    private AddressService addressService;\n\n    @RequestMapping(\"/info/address\")\n    public String address(HttpServletRequest request, Model addressModel){\n        HttpSession session=request.getSession();\n        User user=(User)session.getAttribute(\"user\");\n        if (user==null)\n        {\n            return \"redirect:/login\";\n        }\n        AddressExample addressExample=new AddressExample();\n        addressExample.or().andUseridEqualTo(user.getUserid());\n        List<Address> addressList=addressService.getAllAddressByExample(addressExample);\n        addressModel.addAttribute(\"addressList\",addressList);\n        return \"address\";\n    }\n\n    @RequestMapping(\"/saveAddr\")\n    @ResponseBody\n    public Msg saveAddr(Address address){\n\n        addressService.updateByPrimaryKeySelective(address);\n        return Msg.success(\"修改成功\");\n    }\n\n    @RequestMapping(\"/deleteAddr\")\n    @ResponseBody\n    public Msg deleteAddr(Address address){\n        addressService.deleteByPrimaryKey(address.getAddressid());\n        return Msg.success(\"删除成功\");\n    }\n\n    @RequestMapping(\"/insertAddr\")\n    @ResponseBody\n    public Msg insertAddr(Address address,HttpServletRequest request){\n       HttpSession session=request.getSession();\n       User user=new User();\n       user=(User) session.getAttribute(\"user\");\n       address.setUserid(user.getUserid());\n        addressService.insertSelective(address);\n        return Msg.success(\"添加成功\");\n    }\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @RequestMapping(\"/info/list\")\n    public String list(HttpServletRequest request, Model orderModel){\n\n        HttpSession session=request.getSession();\n        User user;\n        user=(User)session.getAttribute(\"user\");\n\n        if (user==null)\n        {\n            return \"redirect:/login\";\n        }\n\n        OrderExample orderExample=new OrderExample();\n        orderExample.or().andUseridEqualTo(user.getUserid());\n\n        List<Order> orderList=orderService.selectOrderByExample(orderExample);\n        orderModel.addAttribute(\"orderList\",orderList);\n        Order order;\n        OrderItem orderItem;\n        List<OrderItem> orderItemList=new ArrayList<>();\n        Goods goods;\n        Address address;\n       for (Integer i=0;i<orderList.size();i++)\n       {\n           order=orderList.get(i);\n           OrderItemExample orderItemExample=new OrderItemExample();\n           orderItemExample.or().andOrderidEqualTo(order.getOrderid());\n           orderItemList=orderService.getOrderItemByExample(orderItemExample);\n           List<Goods> goodsList=new ArrayList<>();\n           List<Integer> goodsIdList=new ArrayList<>();\n           for (Integer j=0;j<orderItemList.size();j++)\n           {\n               orderItem=orderItemList.get(j);\n               goodsIdList.add(orderItem.getGoodsid());\n           }\n           GoodsExample goodsExample=new GoodsExample();\n           goodsExample.or().andGoodsidIn(goodsIdList);\n           goodsList=goodsService.selectByExample(goodsExample);\n           order.setGoodsInfo(goodsList);\n           address=addressService.selectByPrimaryKey(order.getAddressid());\n           order.setAddress(address);\n           orderList.set(i,order);\n       }\n       orderModel.addAttribute(\"orderList\",orderList);\n\n        return \"list\";\n    }\n\n\n\n    @RequestMapping(\"/deleteList\")\n    @ResponseBody\n    public Msg deleteList(Order order){\n        orderService.deleteById(order.getOrderid());\n        return Msg.success(\"删除成功\");\n    }\n\n\n    @RequestMapping(\"/info/favorite\")\n    public String showFavorite(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, HttpServletRequest request, Model model){\n        HttpSession session=request.getSession();\n        User user=(User)session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 16);\n\n        FavoriteExample favoriteExample = new FavoriteExample();\n        favoriteExample.or().andUseridEqualTo(user.getUserid());\n        List<Favorite> favoriteList = goodsService.selectFavByExample(favoriteExample);\n\n        List<Integer> goodsIdList = new ArrayList<Integer>();\n        for (Favorite tmp:favoriteList) {\n            goodsIdList.add(tmp.getGoodsid());\n        }\n\n        GoodsExample goodsExample = new GoodsExample();\n        List<Goods> goodsList = new ArrayList<>();\n        if (!goodsIdList.isEmpty()) {\n            goodsExample.or().andGoodsidIn(goodsIdList);\n            goodsList = goodsService.selectByExample(goodsExample);\n        }\n\n        //获取图片地址\n        for (int i = 0; i < goodsList.size(); i++) {\n            Goods goods = goodsList.get(i);\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n\n            goods.setImagePaths(imagePathList);\n\n            //判断是否收藏\n            goods.setFav(true);\n\n            goodsList.set(i, goods);\n        }\n\n        //显示几个页号\n        PageInfo page = new PageInfo(goodsList,5);\n        model.addAttribute(\"pageInfo\", page);\n\n        return \"favorite\";\n    }\n\n    @RequestMapping(\"/savePsw\")\n    @ResponseBody\n    public Msg savePsw(String Psw,HttpServletRequest request)\n    {\n        HttpSession session=request.getSession();\n        User user=(User) session.getAttribute(\"user\");\n        user.setPassword(Psw);\n        userService.updateByPrimaryKeySelective(user);\n        return Msg.success(\"修改密码成功\");\n    }\n\n    @RequestMapping(\"/finishList\")\n    @ResponseBody\n    public Msg finishiList(Integer orderid){\n        Order order=orderService.selectByPrimaryKey(orderid);\n        order.setIsreceive(true);\n        order.setIscomplete(true);\n        orderService.updateOrderByKey(order);\n        return Msg.success(\"完成订单成功\");\n    }\n\n    @RequestMapping(\"/logout\")\n    public String logout(HttpServletRequest request){\n        HttpSession session=request.getSession();\n        session.removeAttribute(\"user\");\n        return \"redirect:/login\";\n    }\n\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/FrontGoodsController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.github.pagehelper.PageHelper;\nimport com.github.pagehelper.PageInfo;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.*;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpSession;\nimport java.util.*;\n\n@Controller\npublic class FrontGoodsController {\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @Autowired\n    private CateService cateService;\n\n    @Autowired\n    private CommentService commentService;\n\n    @Autowired\n    private UserService userService;\n\n    @Autowired\n    private ActivityService activityService;\n\n    @RequestMapping(value = \"/detail\",method = RequestMethod.GET)\n    public String detailGoods(Integer goodsid, Model model, HttpSession session) {\n\n        if(goodsid == null) {\n            return \"redirect:/main\";\n        }\n\n        User user = (User) session.getAttribute(\"user\");\n\n        //要传回的数据存在HashMap中\n        Map<String,Object> goodsInfo = new HashMap<String,Object>();\n\n        //查询商品的基本信息\n        Goods goods = goodsService.selectById(goodsid);\n\n        if (user == null) {\n            goods.setFav(false);\n        } else {\n            Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(user.getUserid(), goodsid));\n            if (favorite == null) {\n                goods.setFav(false);\n            } else {\n                goods.setFav(true);\n            }\n        }\n\n        //查询商品类别\n        Category category = cateService.selectById(goods.getCategory());\n\n        //商品图片\n        List<ImagePath> imagePath = goodsService.findImagePath(goodsid);\n\n        //商品评论\n\n        //商品折扣信息\n        Activity activity = activityService.selectByKey(goods.getActivityid());\n        goods.setActivity(activity);\n\n        //返回数据\n        goodsInfo.put(\"goods\", goods);\n        goodsInfo.put(\"cate\", category);\n        goodsInfo.put(\"image\", imagePath);\n        model.addAttribute(\"goodsInfo\",goodsInfo);\n//        model.addAllAttributes(goodsInfo);\n\n        //评论信息\n        CommentExample commentExample=new CommentExample();\n        commentExample.or().andGoodsidEqualTo(goods.getGoodsid());\n        List<Comment> commentList=commentService.selectByExample(commentExample);\n        for (Integer i=0;i<commentList.size();i++)\n        {\n            Comment comment=commentList.get(i);\n            User commentUser=userService.selectByPrimaryKey(comment.getUserid());\n            comment.setUserName(commentUser.getUsername());\n            commentList.set(i,comment);\n        }\n        model.addAttribute(\"commentList\",commentList);\n\n        return \"detail\";\n    }\n\n    @RequestMapping(value = \"/search\", method = RequestMethod.GET)\n    public String searchGoods(@RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, String keyword, Model model, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 16);\n\n        //查询数据\n        GoodsExample goodsExample = new GoodsExample();\n        goodsExample.or().andGoodsnameLike(\"%\" + keyword + \"%\");\n        List<Goods> goodsList = goodsService.selectByExample(goodsExample);\n\n        //获取图片地址\n        for (int i = 0; i < goodsList.size(); i++) {\n            Goods goods = goodsList.get(i);\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n\n            goods.setImagePaths(imagePathList);\n\n            //判断是否收藏\n            if (user == null) {\n                goods.setFav(false);\n            } else {\n                Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(user.getUserid(), goods.getGoodsid()));\n                if (favorite == null) {\n                    goods.setFav(false);\n                } else {\n                    goods.setFav(true);\n                }\n            }\n\n            goodsList.set(i, goods);\n        }\n\n\n        //显示几个页号\n        PageInfo page = new PageInfo(goodsList,5);\n        model.addAttribute(\"pageInfo\", page);\n        model.addAttribute(\"keyword\", keyword);\n\n        return \"search\";\n    }\n\n    @RequestMapping(\"/collect\")\n    @ResponseBody\n    public Msg collectGoods(Integer goodsid, HttpSession session) {\n        //取登录用户信息,未登录重定向至登录页面\n        User user = (User) session.getAttribute(\"user\");\n        if(user == null) {\n            return Msg.fail(\"收藏失败\");\n        }\n\n        //添加收藏\n        Favorite favorite = new Favorite();\n        favorite.setCollecttime(new Date());\n        favorite.setGoodsid(goodsid);\n        favorite.setUserid(user.getUserid());\n\n        goodsService.addFavorite(favorite);\n\n        return Msg.success(\"收藏成功\");\n    }\n\n    @RequestMapping(\"/deleteCollect\")\n    @ResponseBody\n    public Msg deleteFavGoods(Integer goodsid, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return Msg.fail(\"取消收藏失败\");\n        }\n\n        //删除收藏\n        goodsService.deleteFavByKey(new FavoriteKey(user.getUserid(),goodsid));\n\n        return Msg.success(\"取消收藏成功\");\n    }\n\n    @RequestMapping(\"/category\")\n    public String getCateGoods(String cate, @RequestParam(value = \"page\",defaultValue = \"1\") Integer pn, Model model, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n\n        //一页显示几个数据\n        PageHelper.startPage(pn, 16);\n\n        //查询分类id\n        CategoryExample categoryExample = new CategoryExample();\n        categoryExample.or().andCatenameLike(cate);\n        List<Category> categoryList = cateService.selectByExample(categoryExample);\n\n        //获取查出的类别id\n        List<Integer> cateId = new ArrayList<>();\n        for (Category category : categoryList) {\n            cateId.add(category.getCateid());\n        }\n\n        //查询数据\n        GoodsExample goodsExample = new GoodsExample();\n        goodsExample.or().andDetailcateLike(\"%\" + cate + \"%\");\n        if (!cateId.isEmpty()) {\n            goodsExample.or().andCategoryIn(cateId);\n        }\n        List<Goods> goodsList = goodsService.selectByExample(goodsExample);\n\n        //获取图片地址\n        for (int i = 0; i < goodsList.size(); i++) {\n            Goods goods = goodsList.get(i);\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n\n            goods.setImagePaths(imagePathList);\n\n            //判断是否收藏\n            if (user == null) {\n                goods.setFav(false);\n            } else {\n                Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(user.getUserid(), goods.getGoodsid()));\n                if (favorite == null) {\n                    goods.setFav(false);\n                } else {\n                    goods.setFav(true);\n                }\n            }\n\n            goodsList.set(i, goods);\n        }\n\n\n        //显示几个页号\n        PageInfo page = new PageInfo(goodsList,5);\n        model.addAttribute(\"pageInfo\", page);\n        model.addAttribute(\"cate\", cate);\n        return \"category\";\n    }\n\n\n\n    @RequestMapping(\"/comment\")\n    @ResponseBody\n    public Msg comment(Comment comment, HttpServletRequest request){\n        HttpSession session=request.getSession();\n        User user=(User) session.getAttribute(\"user\");\n        if (user == null) {\n            return Msg.fail(\"评论失败\");\n        }\n        comment.setUserid(user.getUserid());\n        Date date=new Date();\n        comment.setCommenttime(date);\n        commentService.insertSelective(comment);\n        return Msg.success(\"评论成功\");\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/MainController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.CateService;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Controller\npublic class MainController {\n\n    @Autowired\n    private CateService cateService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n\n    @RequestMapping(\"/\")\n    public String showAdmin(Model model, HttpSession session) {\n        Integer userid;\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            userid = null;\n        } else {\n            userid = user.getUserid();\n        }\n\n        //数码分类\n        List<Goods> digGoods = getCateGoods(\"数码\", userid);\n        model.addAttribute(\"digGoods\", digGoods);\n\n        //家电\n        List<Goods> houseGoods = getCateGoods(\"家电\", userid);\n        model.addAttribute(\"houseGoods\", houseGoods);\n\n        //服饰\n        List<Goods> colGoods = getCateGoods(\"服饰\", userid);\n        model.addAttribute(\"colGoods\", colGoods);\n\n        //书籍\n        List<Goods> bookGoods = getCateGoods(\"书籍\", userid);\n        model.addAttribute(\"bookGoods\", bookGoods);\n\n        return \"main\";\n    }\n\n\n\n\n    @RequestMapping(\"/main\")\n    public String showAllGoods(Model model, HttpSession session) {\n        Integer userid;\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            userid = null;\n        } else {\n            userid = user.getUserid();\n        }\n\n        //数码分类\n        List<Goods> digGoods = getCateGoods(\"数码\", userid);\n        model.addAttribute(\"digGoods\", digGoods);\n\n        //家电\n        List<Goods> houseGoods = getCateGoods(\"家电\", userid);\n        model.addAttribute(\"houseGoods\", houseGoods);\n\n        //服饰\n        List<Goods> colGoods = getCateGoods(\"服饰\", userid);\n        model.addAttribute(\"colGoods\", colGoods);\n\n        //书籍\n        List<Goods> bookGoods = getCateGoods(\"书籍\", userid);\n        model.addAttribute(\"bookGoods\", bookGoods);\n\n        return \"main\";\n    }\n\n    public List<Goods> getCateGoods(String cate, Integer userid) {\n        //查询分类\n        CategoryExample digCategoryExample = new CategoryExample();\n        digCategoryExample.or().andCatenameLike(cate);\n        List<Category> digCategoryList = cateService.selectByExample(digCategoryExample);\n\n        if (digCategoryList.size() == 0) {\n            return null;\n        }\n\n        //查询属于刚查到的分类的商品\n        GoodsExample digGoodsExample = new GoodsExample();\n        List<Integer> digCateId = new ArrayList<Integer>();\n        for (Category tmp:digCategoryList) {\n            digCateId.add(tmp.getCateid());\n        }\n        digGoodsExample.or().andCategoryIn(digCateId);\n\n        List<Goods> goodsList = goodsService.selectByExampleLimit(digGoodsExample);\n\n        List<Goods> goodsAndImage = new ArrayList<>();\n        //获取每个商品的图片\n        for (Goods goods:goodsList) {\n            //判断是否为登录状态\n            if (userid == null) {\n                goods.setFav(false);\n            } else {\n                Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(userid, goods.getGoodsid()));\n                if (favorite == null) {\n                    goods.setFav(false);\n                } else {\n                    goods.setFav(true);\n                }\n            }\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n            goods.setImagePaths(imagePathList);\n            goodsAndImage.add(goods);\n        }\n        return goodsAndImage;\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/OrderController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.*;\nimport com.zhang.ssmschoolshop.util.Msg;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n\n@Controller\npublic class OrderController {\n\n    /*@Value(\"#{addressService}\")*/\n    @Autowired\n    private AddressService addressService;\n\n    @Autowired\n    private ShopCartService shopCartService;\n\n    @Autowired\n    private GoodsService goodsService;\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private ActivityService activityService;\n\n    @RequestMapping(\"/order\")\n    public String showOrder(HttpSession session, Model model) {\n\n        User user = (User) session.getAttribute(\"user\");\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        //查询当前用户的收货地址\n        AddressExample addressExample = new AddressExample();\n        addressExample.or().andUseridEqualTo(user.getUserid());\n        List<Address> addressList = addressService.getAllAddressByExample(addressExample);\n\n        model.addAttribute(\"address\", addressList);\n\n        //订单信息\n        //获取当前用户的购物车信息\n        ShopCartExample shopCartExample = new ShopCartExample();\n        shopCartExample.or().andUseridEqualTo(user.getUserid());\n        List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);\n\n        //获取购物车中的商品信息\n        List<Goods> goodsAndImage = new ArrayList<>();\n\n        Float totalPrice = new Float(0);\n        Integer oldTotalPrice = 0;\n\n        for (ShopCart cart:shopCart) {\n            Goods goods = goodsService.selectById(cart.getGoodsid());\n\n            List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());\n            goods.setImagePaths(imagePathList);\n            goods.setNum(cart.getGoodsnum());\n\n            //活动信息\n            Activity activity = activityService.selectByKey(goods.getActivityid());\n            goods.setActivity(activity);\n\n            if(activity.getDiscount() != 1) {\n                goods.setNewPrice(goods.getPrice()*goods.getNum()* activity.getDiscount());\n            } else if(activity.getFullnum() != null) {\n                if (goods.getNum() >= activity.getFullnum()) {\n                    goods.setNewPrice((float) (goods.getPrice()*(goods.getNum()-activity.getReducenum())));\n                } else {\n                    goods.setNewPrice((float) (goods.getPrice()*goods.getNum()));\n                }\n            } else {\n                goods.setNewPrice((float) (goods.getPrice()*goods.getNum()));\n            }\n            totalPrice = totalPrice + goods.getNewPrice();\n            oldTotalPrice = oldTotalPrice + goods.getNum() * goods.getPrice();\n            goodsAndImage.add(goods);\n        }\n\n        model.addAttribute(\"totalPrice\", totalPrice);\n        model.addAttribute(\"oldTotalPrice\", oldTotalPrice);\n        model.addAttribute(\"goodsAndImage\", goodsAndImage);\n\n        return \"orderConfirm\";\n    }\n\n    @RequestMapping(\"/orderFinish\")\n    @ResponseBody\n    public Msg orderFinish(Float oldPrice, Float newPrice, Boolean isPay, Integer addressid, HttpSession session) {\n        User user = (User) session.getAttribute(\"user\");\n\n        //获取订单信息\n        ShopCartExample shopCartExample = new ShopCartExample();\n        shopCartExample.or().andUseridEqualTo(user.getUserid());\n        List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);\n\n        //删除购物车\n        for (ShopCart cart : shopCart) {\n            shopCartService.deleteByKey(new ShopCartKey(cart.getUserid(),cart.getGoodsid()));\n        }\n\n        //把订单信息写入数据库\n        Order order = new Order(null, user.getUserid(), new Date(), oldPrice, newPrice, isPay, false, false, false, addressid,null,null);\n        orderService.insertOrder(order);\n        //插入的订单号\n        Integer orderId = order.getOrderid();\n\n        //把订单项写入orderitem表中\n        for (ShopCart cart : shopCart) {\n            orderService.insertOrderItem(new OrderItem(null, orderId, cart.getGoodsid(), cart.getGoodsnum()));\n        }\n\n        return Msg.success(\"购买成功\");\n    }\n\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/controller/front/VerificationCodeImgController.java",
    "content": "package com.zhang.ssmschoolshop.controller.front;\n\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.servlet.ModelAndView;\n\n\n@Controller\npublic class VerificationCodeImgController {\n    @RequestMapping(\"/verificationcodeimg\")\n    public ModelAndView verificationcodeimg(){\n        ModelAndView verificationcodeimg=new ModelAndView();\n        verificationcodeimg.setViewName(\"verificationcodeimg\");\n        return verificationcodeimg;\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/ActivityMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ActivityMapper {\n    long countByExample(ActivityExample example);\n\n    int deleteByExample(ActivityExample example);\n\n    int deleteByPrimaryKey(Integer activityid);\n\n    int insert(Activity record);\n\n    int insertSelective(Activity record);\n\n    List<Activity> selectByExample(ActivityExample example);\n\n    Activity selectByPrimaryKey(Integer activityid);\n\n    int updateByExampleSelective(@Param(\"record\") Activity record, @Param(\"example\") ActivityExample example);\n\n    int updateByExample(@Param(\"record\") Activity record, @Param(\"example\") ActivityExample example);\n\n    int updateByPrimaryKeySelective(Activity record);\n\n    int updateByPrimaryKey(Activity record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/AddressMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Address;\nimport com.zhang.ssmschoolshop.entity.AddressExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface AddressMapper {\n    long countByExample(AddressExample example);\n\n    int deleteByExample(AddressExample example);\n\n    int deleteByPrimaryKey(Integer addressid);\n\n    int insert(Address record);\n\n    int insertSelective(Address record);\n\n    List<Address> selectByExample(AddressExample example);\n\n    Address selectByPrimaryKey(Integer addressid);\n\n    int updateByExampleSelective(@Param(\"record\") Address record, @Param(\"example\") AddressExample example);\n\n    int updateByExample(@Param(\"record\") Address record, @Param(\"example\") AddressExample example);\n\n    int updateByPrimaryKeySelective(Address record);\n\n    int updateByPrimaryKey(Address record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/AdminMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.entity.AdminExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface AdminMapper {\n    long countByExample(AdminExample example);\n\n    int deleteByExample(AdminExample example);\n\n    int deleteByPrimaryKey(Integer adminid);\n\n    int insert(Admin record);\n\n    int insertSelective(Admin record);\n\n    List<Admin> selectByExample(AdminExample example);\n\n    Admin selectByPrimaryKey(Integer adminid);\n\n    Admin selectByName(Admin admin);\n\n    int updateByExampleSelective(@Param(\"record\") Admin record, @Param(\"example\") AdminExample example);\n\n    int updateByExample(@Param(\"record\") Admin record, @Param(\"example\") AdminExample example);\n\n    int updateByPrimaryKeySelective(Admin record);\n\n    int updateByPrimaryKey(Admin record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/CategoryMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Category;\nimport com.zhang.ssmschoolshop.entity.CategoryExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface CategoryMapper {\n    long countByExample(CategoryExample example);\n\n    int deleteByExample(CategoryExample example);\n\n    int deleteByPrimaryKey(Integer cateid);\n\n    int insert(Category record);\n\n    int insertSelective(Category record);\n\n    List<Category> selectByExample(CategoryExample example);\n\n    List<Category> selectByExampleLimit(CategoryExample example);\n\n    Category selectByPrimaryKey(Integer cateid);\n\n    int updateByExampleSelective(@Param(\"record\") Category record, @Param(\"example\") CategoryExample example);\n\n    int updateByExample(@Param(\"record\") Category record, @Param(\"example\") CategoryExample example);\n\n    int updateByPrimaryKeySelective(Category record);\n\n    int updateByPrimaryKey(Category record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/ChatMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Chat;\nimport com.zhang.ssmschoolshop.entity.ChatExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ChatMapper {\n    long countByExample(ChatExample example);\n\n    int deleteByExample(ChatExample example);\n\n    int deleteByPrimaryKey(Integer chatid);\n\n    int insert(Chat record);\n\n    int insertSelective(Chat record);\n\n    List<Chat> selectByExample(ChatExample example);\n\n    Chat selectByPrimaryKey(Integer chatid);\n\n    int updateByExampleSelective(@Param(\"record\") Chat record, @Param(\"example\") ChatExample example);\n\n    int updateByExample(@Param(\"record\") Chat record, @Param(\"example\") ChatExample example);\n\n    int updateByPrimaryKeySelective(Chat record);\n\n    int updateByPrimaryKey(Chat record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/CommentMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Comment;\nimport com.zhang.ssmschoolshop.entity.CommentExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface CommentMapper {\n    long countByExample(CommentExample example);\n\n    int deleteByExample(CommentExample example);\n\n    int deleteByPrimaryKey(Integer commentid);\n\n    int insert(Comment record);\n\n    int insertSelective(Comment record);\n\n    List<Comment> selectByExample(CommentExample example);\n\n    Comment selectByPrimaryKey(Integer commentid);\n\n    int updateByExampleSelective(@Param(\"record\") Comment record, @Param(\"example\") CommentExample example);\n\n    int updateByExample(@Param(\"record\") Comment record, @Param(\"example\") CommentExample example);\n\n    int updateByPrimaryKeySelective(Comment record);\n\n    int updateByPrimaryKey(Comment record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/DeliverMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Deliver;\nimport com.zhang.ssmschoolshop.entity.DeliverExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface DeliverMapper {\n    long countByExample(DeliverExample example);\n\n    int deleteByExample(DeliverExample example);\n\n    int deleteByPrimaryKey(Integer deliverid);\n\n    int insert(Deliver record);\n\n    int insertSelective(Deliver record);\n\n    List<Deliver> selectByExample(DeliverExample example);\n\n    Deliver selectByPrimaryKey(Integer deliverid);\n\n    int updateByExampleSelective(@Param(\"record\") Deliver record, @Param(\"example\") DeliverExample example);\n\n    int updateByExample(@Param(\"record\") Deliver record, @Param(\"example\") DeliverExample example);\n\n    int updateByPrimaryKeySelective(Deliver record);\n\n    int updateByPrimaryKey(Deliver record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/FavoriteMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Favorite;\nimport com.zhang.ssmschoolshop.entity.FavoriteExample;\nimport com.zhang.ssmschoolshop.entity.FavoriteKey;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface FavoriteMapper {\n    long countByExample(FavoriteExample example);\n\n    int deleteByExample(FavoriteExample example);\n\n    int deleteByPrimaryKey(FavoriteKey key);\n\n    int insert(Favorite record);\n\n    int insertSelective(Favorite record);\n\n    List<Favorite> selectByExample(FavoriteExample example);\n\n    Favorite selectByPrimaryKey(FavoriteKey key);\n\n    int updateByExampleSelective(@Param(\"record\") Favorite record, @Param(\"example\") FavoriteExample example);\n\n    int updateByExample(@Param(\"record\") Favorite record, @Param(\"example\") FavoriteExample example);\n\n    int updateByPrimaryKeySelective(Favorite record);\n\n    int updateByPrimaryKey(Favorite record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/GoodsMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\nimport com.zhang.ssmschoolshop.entity.Goods;\nimport com.zhang.ssmschoolshop.entity.GoodsExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface GoodsMapper {\n    long countByExample(GoodsExample example);\n\n    int deleteByExample(GoodsExample example);\n\n    int deleteByPrimaryKey(Integer goodsid);\n\n    int insert(Goods record);\n\n    int insertSelective(Goods record);\n\n    List<Goods> selectByExampleWithBLOBs(GoodsExample example);\n\n    List<Goods> selectByExample(GoodsExample example);\n\n    Goods selectByPrimaryKey(Integer goodsid);\n\n    int updateByExampleSelective(@Param(\"record\") Goods record, @Param(\"example\") GoodsExample example);\n\n    int updateByExampleWithBLOBs(@Param(\"record\") Goods record, @Param(\"example\") GoodsExample example);\n\n    int updateByExample(@Param(\"record\") Goods record, @Param(\"example\") GoodsExample example);\n\n    int updateByPrimaryKeySelective(Goods record);\n\n    int updateByPrimaryKeyWithBLOBs(Goods record);\n\n    int updateByPrimaryKey(Goods record);\n\n    List<Goods> selectByExampleWithBLOBsLimit(GoodsExample digGoodsExample);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/ImagePathMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.ImagePath;\nimport com.zhang.ssmschoolshop.entity.ImagePathExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ImagePathMapper {\n    long countByExample(ImagePathExample example);\n\n    int deleteByExample(ImagePathExample example);\n\n    int deleteByPrimaryKey(Integer pathid);\n\n    int insert(ImagePath record);\n\n    int insertSelective(ImagePath record);\n\n    List<ImagePath> selectByExample(ImagePathExample example);\n\n    ImagePath selectByPrimaryKey(Integer pathid);\n\n    int updateByExampleSelective(@Param(\"record\") ImagePath record, @Param(\"example\") ImagePathExample example);\n\n    int updateByExample(@Param(\"record\") ImagePath record, @Param(\"example\") ImagePathExample example);\n\n    int updateByPrimaryKeySelective(ImagePath record);\n\n    int updateByPrimaryKey(ImagePath record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/OrderItemMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.OrderItem;\nimport com.zhang.ssmschoolshop.entity.OrderItemExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface OrderItemMapper {\n    long countByExample(OrderItemExample example);\n\n    int deleteByExample(OrderItemExample example);\n\n    int deleteByPrimaryKey(Integer itemid);\n\n    int insert(OrderItem record);\n\n    int insertSelective(OrderItem record);\n\n    List<OrderItem> selectByExample(OrderItemExample example);\n\n    OrderItem selectByPrimaryKey(Integer itemid);\n\n    int updateByExampleSelective(@Param(\"record\") OrderItem record, @Param(\"example\") OrderItemExample example);\n\n    int updateByExample(@Param(\"record\") OrderItem record, @Param(\"example\") OrderItemExample example);\n\n    int updateByPrimaryKeySelective(OrderItem record);\n\n    int updateByPrimaryKey(OrderItem record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/OrderMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.Order;\nimport com.zhang.ssmschoolshop.entity.OrderExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface OrderMapper {\n    long countByExample(OrderExample example);\n\n    int deleteByExample(OrderExample example);\n\n    int deleteByPrimaryKey(Integer orderid);\n\n    int insert(Order record);\n\n    int insertSelective(Order record);\n\n    List<Order> selectByExample(OrderExample example);\n\n    Order selectByPrimaryKey(Integer orderid);\n\n    int updateByExampleSelective(@Param(\"record\") Order record, @Param(\"example\") OrderExample example);\n\n    int updateByExample(@Param(\"record\") Order record, @Param(\"example\") OrderExample example);\n\n    int updateByPrimaryKeySelective(Order record);\n\n    int updateByPrimaryKey(Order record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/ShopCartMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.ShopCart;\nimport com.zhang.ssmschoolshop.entity.ShopCartExample;\nimport com.zhang.ssmschoolshop.entity.ShopCartKey;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface ShopCartMapper {\n    long countByExample(ShopCartExample example);\n\n    int deleteByExample(ShopCartExample example);\n\n    int deleteByPrimaryKey(ShopCartKey key);\n\n    int insert(ShopCart record);\n\n    int insertSelective(ShopCart record);\n\n    List<ShopCart> selectByExample(ShopCartExample example);\n\n    ShopCart selectByPrimaryKey(ShopCartKey key);\n\n    int updateByExampleSelective(@Param(\"record\") ShopCart record, @Param(\"example\") ShopCartExample example);\n\n    int updateByExample(@Param(\"record\") ShopCart record, @Param(\"example\") ShopCartExample example);\n\n    int updateByPrimaryKeySelective(ShopCart record);\n\n    int updateByPrimaryKey(ShopCart record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/dao/UserMapper.java",
    "content": "package com.zhang.ssmschoolshop.dao;\n\n\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface UserMapper {\n    long countByExample(UserExample example);\n\n    int deleteByExample(UserExample example);\n\n    int deleteByPrimaryKey(Integer userid);\n\n    int insert(User record);\n\n    int insertSelective(User record);\n\n    List<User> selectByExample(UserExample example);\n\n    User selectByPrimaryKey(Integer userid);\n\n    int updateByExampleSelective(@Param(\"record\") User record, @Param(\"example\") UserExample example);\n\n    int updateByExample(@Param(\"record\") User record, @Param(\"example\") UserExample example);\n\n    int updateByPrimaryKeySelective(User record);\n\n    int updateByPrimaryKey(User record);\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Activity.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\n/**\n * 促销活动\n */\npublic class Activity {\n    private Integer activityid;\n\n    private String activityname;\n\n    private String activitydes;\n\n    private Float discount;\n\n    private Integer fullprice;\n\n    private Integer reduceprice;\n\n    private Integer fullnum;\n\n    private Integer reducenum;\n\n    public Integer getActivityid() {\n        return activityid;\n    }\n\n    public void setActivityid(Integer activityid) {\n        this.activityid = activityid;\n    }\n\n    public String getActivityname() {\n        return activityname;\n    }\n\n    public void setActivityname(String activityname) {\n        this.activityname = activityname == null ? null : activityname.trim();\n    }\n\n    public String getActivitydes() {\n        return activitydes;\n    }\n\n    public void setActivitydes(String activitydes) {\n        this.activitydes = activitydes == null ? null : activitydes.trim();\n    }\n\n    public Float getDiscount() {\n        return discount;\n    }\n\n    public void setDiscount(Float discount) {\n        this.discount = discount;\n    }\n\n    public Integer getFullprice() {\n        return fullprice;\n    }\n\n    public void setFullprice(Integer fullprice) {\n        this.fullprice = fullprice;\n    }\n\n    public Integer getReduceprice() {\n        return reduceprice;\n    }\n\n    public void setReduceprice(Integer reduceprice) {\n        this.reduceprice = reduceprice;\n    }\n\n    public Integer getFullnum() {\n        return fullnum;\n    }\n\n    public void setFullnum(Integer fullnum) {\n        this.fullnum = fullnum;\n    }\n\n    public Integer getReducenum() {\n        return reducenum;\n    }\n\n    public void setReducenum(Integer reducenum) {\n        this.reducenum = reducenum;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ActivityExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ActivityExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ActivityExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andActivityidIsNull() {\n            addCriterion(\"activityId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIsNotNull() {\n            addCriterion(\"activityId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidEqualTo(Integer value) {\n            addCriterion(\"activityId =\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotEqualTo(Integer value) {\n            addCriterion(\"activityId <>\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThan(Integer value) {\n            addCriterion(\"activityId >\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId >=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThan(Integer value) {\n            addCriterion(\"activityId <\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId <=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIn(List<Integer> values) {\n            addCriterion(\"activityId in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotIn(List<Integer> values) {\n            addCriterion(\"activityId not in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId not between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameIsNull() {\n            addCriterion(\"activityName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameIsNotNull() {\n            addCriterion(\"activityName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameEqualTo(String value) {\n            addCriterion(\"activityName =\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotEqualTo(String value) {\n            addCriterion(\"activityName <>\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameGreaterThan(String value) {\n            addCriterion(\"activityName >\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"activityName >=\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameLessThan(String value) {\n            addCriterion(\"activityName <\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameLessThanOrEqualTo(String value) {\n            addCriterion(\"activityName <=\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameLike(String value) {\n            addCriterion(\"activityName like\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotLike(String value) {\n            addCriterion(\"activityName not like\", value, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameIn(List<String> values) {\n            addCriterion(\"activityName in\", values, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotIn(List<String> values) {\n            addCriterion(\"activityName not in\", values, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameBetween(String value1, String value2) {\n            addCriterion(\"activityName between\", value1, value2, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitynameNotBetween(String value1, String value2) {\n            addCriterion(\"activityName not between\", value1, value2, \"activityname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesIsNull() {\n            addCriterion(\"activityDes is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesIsNotNull() {\n            addCriterion(\"activityDes is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesEqualTo(String value) {\n            addCriterion(\"activityDes =\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotEqualTo(String value) {\n            addCriterion(\"activityDes <>\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesGreaterThan(String value) {\n            addCriterion(\"activityDes >\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesGreaterThanOrEqualTo(String value) {\n            addCriterion(\"activityDes >=\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesLessThan(String value) {\n            addCriterion(\"activityDes <\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesLessThanOrEqualTo(String value) {\n            addCriterion(\"activityDes <=\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesLike(String value) {\n            addCriterion(\"activityDes like\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotLike(String value) {\n            addCriterion(\"activityDes not like\", value, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesIn(List<String> values) {\n            addCriterion(\"activityDes in\", values, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotIn(List<String> values) {\n            addCriterion(\"activityDes not in\", values, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesBetween(String value1, String value2) {\n            addCriterion(\"activityDes between\", value1, value2, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivitydesNotBetween(String value1, String value2) {\n            addCriterion(\"activityDes not between\", value1, value2, \"activitydes\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountIsNull() {\n            addCriterion(\"discount is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountIsNotNull() {\n            addCriterion(\"discount is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountEqualTo(Float value) {\n            addCriterion(\"discount =\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountNotEqualTo(Float value) {\n            addCriterion(\"discount <>\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountGreaterThan(Float value) {\n            addCriterion(\"discount >\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountGreaterThanOrEqualTo(Float value) {\n            addCriterion(\"discount >=\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountLessThan(Float value) {\n            addCriterion(\"discount <\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountLessThanOrEqualTo(Float value) {\n            addCriterion(\"discount <=\", value, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountIn(List<Float> values) {\n            addCriterion(\"discount in\", values, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountNotIn(List<Float> values) {\n            addCriterion(\"discount not in\", values, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountBetween(Float value1, Float value2) {\n            addCriterion(\"discount between\", value1, value2, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDiscountNotBetween(Float value1, Float value2) {\n            addCriterion(\"discount not between\", value1, value2, \"discount\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceIsNull() {\n            addCriterion(\"fullPrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceIsNotNull() {\n            addCriterion(\"fullPrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceEqualTo(Integer value) {\n            addCriterion(\"fullPrice =\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceNotEqualTo(Integer value) {\n            addCriterion(\"fullPrice <>\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceGreaterThan(Integer value) {\n            addCriterion(\"fullPrice >\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"fullPrice >=\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceLessThan(Integer value) {\n            addCriterion(\"fullPrice <\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceLessThanOrEqualTo(Integer value) {\n            addCriterion(\"fullPrice <=\", value, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceIn(List<Integer> values) {\n            addCriterion(\"fullPrice in\", values, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceNotIn(List<Integer> values) {\n            addCriterion(\"fullPrice not in\", values, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullPrice between\", value1, value2, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullpriceNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullPrice not between\", value1, value2, \"fullprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceIsNull() {\n            addCriterion(\"reducePrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceIsNotNull() {\n            addCriterion(\"reducePrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceEqualTo(Integer value) {\n            addCriterion(\"reducePrice =\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceNotEqualTo(Integer value) {\n            addCriterion(\"reducePrice <>\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceGreaterThan(Integer value) {\n            addCriterion(\"reducePrice >\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"reducePrice >=\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceLessThan(Integer value) {\n            addCriterion(\"reducePrice <\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceLessThanOrEqualTo(Integer value) {\n            addCriterion(\"reducePrice <=\", value, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceIn(List<Integer> values) {\n            addCriterion(\"reducePrice in\", values, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceNotIn(List<Integer> values) {\n            addCriterion(\"reducePrice not in\", values, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceBetween(Integer value1, Integer value2) {\n            addCriterion(\"reducePrice between\", value1, value2, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducepriceNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"reducePrice not between\", value1, value2, \"reduceprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumIsNull() {\n            addCriterion(\"fullNum is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumIsNotNull() {\n            addCriterion(\"fullNum is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumEqualTo(Integer value) {\n            addCriterion(\"fullNum =\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumNotEqualTo(Integer value) {\n            addCriterion(\"fullNum <>\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumGreaterThan(Integer value) {\n            addCriterion(\"fullNum >\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"fullNum >=\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumLessThan(Integer value) {\n            addCriterion(\"fullNum <\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"fullNum <=\", value, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumIn(List<Integer> values) {\n            addCriterion(\"fullNum in\", values, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumNotIn(List<Integer> values) {\n            addCriterion(\"fullNum not in\", values, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullNum between\", value1, value2, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andFullnumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"fullNum not between\", value1, value2, \"fullnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumIsNull() {\n            addCriterion(\"reduceNum is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumIsNotNull() {\n            addCriterion(\"reduceNum is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumEqualTo(Integer value) {\n            addCriterion(\"reduceNum =\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumNotEqualTo(Integer value) {\n            addCriterion(\"reduceNum <>\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumGreaterThan(Integer value) {\n            addCriterion(\"reduceNum >\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"reduceNum >=\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumLessThan(Integer value) {\n            addCriterion(\"reduceNum <\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"reduceNum <=\", value, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumIn(List<Integer> values) {\n            addCriterion(\"reduceNum in\", values, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumNotIn(List<Integer> values) {\n            addCriterion(\"reduceNum not in\", values, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumBetween(Integer value1, Integer value2) {\n            addCriterion(\"reduceNum between\", value1, value2, \"reducenum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReducenumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"reduceNum not between\", value1, value2, \"reducenum\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Address.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Address {\n    private Integer addressid;\n\n    private Integer userid;\n\n    private String province;\n\n    private String city;\n\n    private String county;\n\n    private String detailaddr;\n\n    private String conname;\n\n    private String contel;\n\n    public Integer getAddressid() {\n        return addressid;\n    }\n\n    public void setAddressid(Integer addressid) {\n        this.addressid = addressid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public String getProvince() {\n        return province;\n    }\n\n    public void setProvince(String province) {\n        this.province = province == null ? null : province.trim();\n    }\n\n    public String getCity() {\n        return city;\n    }\n\n    public void setCity(String city) {\n        this.city = city == null ? null : city.trim();\n    }\n\n    public String getCounty() {\n        return county;\n    }\n\n    public void setCounty(String county) {\n        this.county = county == null ? null : county.trim();\n    }\n\n    public String getDetailaddr() {\n        return detailaddr;\n    }\n\n    public void setDetailaddr(String detailaddr) {\n        this.detailaddr = detailaddr == null ? null : detailaddr.trim();\n    }\n\n    public String getConname() {\n        return conname;\n    }\n\n    public void setConname(String conname) {\n        this.conname = conname == null ? null : conname.trim();\n    }\n\n    public String getContel() {\n        return contel;\n    }\n\n    public void setContel(String contel) {\n        this.contel = contel == null ? null : contel.trim();\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/AddressExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class AddressExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public AddressExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andAddressidIsNull() {\n            addCriterion(\"addressID is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIsNotNull() {\n            addCriterion(\"addressID is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidEqualTo(Integer value) {\n            addCriterion(\"addressID =\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotEqualTo(Integer value) {\n            addCriterion(\"addressID <>\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThan(Integer value) {\n            addCriterion(\"addressID >\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"addressID >=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThan(Integer value) {\n            addCriterion(\"addressID <\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"addressID <=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIn(List<Integer> values) {\n            addCriterion(\"addressID in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotIn(List<Integer> values) {\n            addCriterion(\"addressID not in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressID between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressID not between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceIsNull() {\n            addCriterion(\"province is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceIsNotNull() {\n            addCriterion(\"province is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceEqualTo(String value) {\n            addCriterion(\"province =\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotEqualTo(String value) {\n            addCriterion(\"province <>\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceGreaterThan(String value) {\n            addCriterion(\"province >\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceGreaterThanOrEqualTo(String value) {\n            addCriterion(\"province >=\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceLessThan(String value) {\n            addCriterion(\"province <\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceLessThanOrEqualTo(String value) {\n            addCriterion(\"province <=\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceLike(String value) {\n            addCriterion(\"province like\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotLike(String value) {\n            addCriterion(\"province not like\", value, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceIn(List<String> values) {\n            addCriterion(\"province in\", values, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotIn(List<String> values) {\n            addCriterion(\"province not in\", values, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceBetween(String value1, String value2) {\n            addCriterion(\"province between\", value1, value2, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andProvinceNotBetween(String value1, String value2) {\n            addCriterion(\"province not between\", value1, value2, \"province\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityIsNull() {\n            addCriterion(\"city is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityIsNotNull() {\n            addCriterion(\"city is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityEqualTo(String value) {\n            addCriterion(\"city =\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotEqualTo(String value) {\n            addCriterion(\"city <>\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityGreaterThan(String value) {\n            addCriterion(\"city >\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityGreaterThanOrEqualTo(String value) {\n            addCriterion(\"city >=\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityLessThan(String value) {\n            addCriterion(\"city <\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityLessThanOrEqualTo(String value) {\n            addCriterion(\"city <=\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityLike(String value) {\n            addCriterion(\"city like\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotLike(String value) {\n            addCriterion(\"city not like\", value, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityIn(List<String> values) {\n            addCriterion(\"city in\", values, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotIn(List<String> values) {\n            addCriterion(\"city not in\", values, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityBetween(String value1, String value2) {\n            addCriterion(\"city between\", value1, value2, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCityNotBetween(String value1, String value2) {\n            addCriterion(\"city not between\", value1, value2, \"city\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyIsNull() {\n            addCriterion(\"county is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyIsNotNull() {\n            addCriterion(\"county is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyEqualTo(String value) {\n            addCriterion(\"county =\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotEqualTo(String value) {\n            addCriterion(\"county <>\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyGreaterThan(String value) {\n            addCriterion(\"county >\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyGreaterThanOrEqualTo(String value) {\n            addCriterion(\"county >=\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyLessThan(String value) {\n            addCriterion(\"county <\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyLessThanOrEqualTo(String value) {\n            addCriterion(\"county <=\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyLike(String value) {\n            addCriterion(\"county like\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotLike(String value) {\n            addCriterion(\"county not like\", value, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyIn(List<String> values) {\n            addCriterion(\"county in\", values, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotIn(List<String> values) {\n            addCriterion(\"county not in\", values, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyBetween(String value1, String value2) {\n            addCriterion(\"county between\", value1, value2, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCountyNotBetween(String value1, String value2) {\n            addCriterion(\"county not between\", value1, value2, \"county\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrIsNull() {\n            addCriterion(\"detailAddr is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrIsNotNull() {\n            addCriterion(\"detailAddr is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrEqualTo(String value) {\n            addCriterion(\"detailAddr =\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotEqualTo(String value) {\n            addCriterion(\"detailAddr <>\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrGreaterThan(String value) {\n            addCriterion(\"detailAddr >\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrGreaterThanOrEqualTo(String value) {\n            addCriterion(\"detailAddr >=\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrLessThan(String value) {\n            addCriterion(\"detailAddr <\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrLessThanOrEqualTo(String value) {\n            addCriterion(\"detailAddr <=\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrLike(String value) {\n            addCriterion(\"detailAddr like\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotLike(String value) {\n            addCriterion(\"detailAddr not like\", value, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrIn(List<String> values) {\n            addCriterion(\"detailAddr in\", values, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotIn(List<String> values) {\n            addCriterion(\"detailAddr not in\", values, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrBetween(String value1, String value2) {\n            addCriterion(\"detailAddr between\", value1, value2, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailaddrNotBetween(String value1, String value2) {\n            addCriterion(\"detailAddr not between\", value1, value2, \"detailaddr\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameIsNull() {\n            addCriterion(\"conName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameIsNotNull() {\n            addCriterion(\"conName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameEqualTo(String value) {\n            addCriterion(\"conName =\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotEqualTo(String value) {\n            addCriterion(\"conName <>\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameGreaterThan(String value) {\n            addCriterion(\"conName >\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"conName >=\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameLessThan(String value) {\n            addCriterion(\"conName <\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameLessThanOrEqualTo(String value) {\n            addCriterion(\"conName <=\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameLike(String value) {\n            addCriterion(\"conName like\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotLike(String value) {\n            addCriterion(\"conName not like\", value, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameIn(List<String> values) {\n            addCriterion(\"conName in\", values, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotIn(List<String> values) {\n            addCriterion(\"conName not in\", values, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameBetween(String value1, String value2) {\n            addCriterion(\"conName between\", value1, value2, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andConnameNotBetween(String value1, String value2) {\n            addCriterion(\"conName not between\", value1, value2, \"conname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelIsNull() {\n            addCriterion(\"conTel is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelIsNotNull() {\n            addCriterion(\"conTel is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelEqualTo(String value) {\n            addCriterion(\"conTel =\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotEqualTo(String value) {\n            addCriterion(\"conTel <>\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelGreaterThan(String value) {\n            addCriterion(\"conTel >\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelGreaterThanOrEqualTo(String value) {\n            addCriterion(\"conTel >=\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelLessThan(String value) {\n            addCriterion(\"conTel <\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelLessThanOrEqualTo(String value) {\n            addCriterion(\"conTel <=\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelLike(String value) {\n            addCriterion(\"conTel like\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotLike(String value) {\n            addCriterion(\"conTel not like\", value, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelIn(List<String> values) {\n            addCriterion(\"conTel in\", values, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotIn(List<String> values) {\n            addCriterion(\"conTel not in\", values, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelBetween(String value1, String value2) {\n            addCriterion(\"conTel between\", value1, value2, \"contel\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContelNotBetween(String value1, String value2) {\n            addCriterion(\"conTel not between\", value1, value2, \"contel\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Admin.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Admin {\n    private Integer adminid;\n\n    private String adminname;\n\n    private String password;\n\n    public Admin(Integer adminid, String adminname, String password) {\n        this.adminid = adminid;\n        this.adminname = adminname;\n        this.password = password;\n    }\n\n    public Admin() {\n    }\n\n    public Integer getAdminid() {\n        return adminid;\n    }\n\n    public void setAdminid(Integer adminid) {\n        this.adminid = adminid;\n    }\n\n    public String getAdminname() {\n        return adminname;\n    }\n\n    public void setAdminname(String adminname) {\n        this.adminname = adminname == null ? null : adminname.trim();\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password == null ? null : password.trim();\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/AdminExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class AdminExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public AdminExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andAdminidIsNull() {\n            addCriterion(\"adminId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidIsNotNull() {\n            addCriterion(\"adminId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidEqualTo(Integer value) {\n            addCriterion(\"adminId =\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidNotEqualTo(Integer value) {\n            addCriterion(\"adminId <>\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidGreaterThan(Integer value) {\n            addCriterion(\"adminId >\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"adminId >=\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidLessThan(Integer value) {\n            addCriterion(\"adminId <\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"adminId <=\", value, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidIn(List<Integer> values) {\n            addCriterion(\"adminId in\", values, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidNotIn(List<Integer> values) {\n            addCriterion(\"adminId not in\", values, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidBetween(Integer value1, Integer value2) {\n            addCriterion(\"adminId between\", value1, value2, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"adminId not between\", value1, value2, \"adminid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameIsNull() {\n            addCriterion(\"adminName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameIsNotNull() {\n            addCriterion(\"adminName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameEqualTo(String value) {\n            addCriterion(\"adminName =\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotEqualTo(String value) {\n            addCriterion(\"adminName <>\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameGreaterThan(String value) {\n            addCriterion(\"adminName >\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"adminName >=\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameLessThan(String value) {\n            addCriterion(\"adminName <\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameLessThanOrEqualTo(String value) {\n            addCriterion(\"adminName <=\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameLike(String value) {\n            addCriterion(\"adminName like\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotLike(String value) {\n            addCriterion(\"adminName not like\", value, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameIn(List<String> values) {\n            addCriterion(\"adminName in\", values, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotIn(List<String> values) {\n            addCriterion(\"adminName not in\", values, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameBetween(String value1, String value2) {\n            addCriterion(\"adminName between\", value1, value2, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAdminnameNotBetween(String value1, String value2) {\n            addCriterion(\"adminName not between\", value1, value2, \"adminname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNull() {\n            addCriterion(\"password is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNotNull() {\n            addCriterion(\"password is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordEqualTo(String value) {\n            addCriterion(\"password =\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotEqualTo(String value) {\n            addCriterion(\"password <>\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThan(String value) {\n            addCriterion(\"password >\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThanOrEqualTo(String value) {\n            addCriterion(\"password >=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThan(String value) {\n            addCriterion(\"password <\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThanOrEqualTo(String value) {\n            addCriterion(\"password <=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLike(String value) {\n            addCriterion(\"password like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotLike(String value) {\n            addCriterion(\"password not like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIn(List<String> values) {\n            addCriterion(\"password in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotIn(List<String> values) {\n            addCriterion(\"password not in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordBetween(String value1, String value2) {\n            addCriterion(\"password between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotBetween(String value1, String value2) {\n            addCriterion(\"password not between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Category.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Category {\n    private Integer cateid;\n\n    private String catename;\n\n    public Integer getCateid() {\n        return cateid;\n    }\n\n    public void setCateid(Integer cateid) {\n        this.cateid = cateid;\n    }\n\n    public String getCatename() {\n        return catename;\n    }\n\n    public void setCatename(String catename) {\n        this.catename = catename == null ? null : catename.trim();\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/CategoryExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class CategoryExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public CategoryExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andCateidIsNull() {\n            addCriterion(\"cateId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidIsNotNull() {\n            addCriterion(\"cateId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidEqualTo(Integer value) {\n            addCriterion(\"cateId =\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidNotEqualTo(Integer value) {\n            addCriterion(\"cateId <>\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidGreaterThan(Integer value) {\n            addCriterion(\"cateId >\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"cateId >=\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidLessThan(Integer value) {\n            addCriterion(\"cateId <\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"cateId <=\", value, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidIn(List<Integer> values) {\n            addCriterion(\"cateId in\", values, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidNotIn(List<Integer> values) {\n            addCriterion(\"cateId not in\", values, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidBetween(Integer value1, Integer value2) {\n            addCriterion(\"cateId between\", value1, value2, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCateidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"cateId not between\", value1, value2, \"cateid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameIsNull() {\n            addCriterion(\"cateName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameIsNotNull() {\n            addCriterion(\"cateName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameEqualTo(String value) {\n            addCriterion(\"cateName =\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotEqualTo(String value) {\n            addCriterion(\"cateName <>\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameGreaterThan(String value) {\n            addCriterion(\"cateName >\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"cateName >=\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameLessThan(String value) {\n            addCriterion(\"cateName <\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameLessThanOrEqualTo(String value) {\n            addCriterion(\"cateName <=\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameLike(String value) {\n            addCriterion(\"cateName like\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotLike(String value) {\n            addCriterion(\"cateName not like\", value, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameIn(List<String> values) {\n            addCriterion(\"cateName in\", values, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotIn(List<String> values) {\n            addCriterion(\"cateName not in\", values, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameBetween(String value1, String value2) {\n            addCriterion(\"cateName between\", value1, value2, \"catename\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatenameNotBetween(String value1, String value2) {\n            addCriterion(\"cateName not between\", value1, value2, \"catename\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Chat.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\n/**\n * 聊天\n */\npublic class Chat {\n    private Integer chatid;\n\n    private Integer senduser;\n\n    private Integer receiveuser;\n\n    private String msgcontent;\n\n    private Date msgtime;\n\n    public Integer getChatid() {\n        return chatid;\n    }\n\n    public void setChatid(Integer chatid) {\n        this.chatid = chatid;\n    }\n\n    public Integer getSenduser() {\n        return senduser;\n    }\n\n    public void setSenduser(Integer senduser) {\n        this.senduser = senduser;\n    }\n\n    public Integer getReceiveuser() {\n        return receiveuser;\n    }\n\n    public void setReceiveuser(Integer receiveuser) {\n        this.receiveuser = receiveuser;\n    }\n\n    public String getMsgcontent() {\n        return msgcontent;\n    }\n\n    public void setMsgcontent(String msgcontent) {\n        this.msgcontent = msgcontent == null ? null : msgcontent.trim();\n    }\n\n    public Date getMsgtime() {\n        return msgtime;\n    }\n\n    public void setMsgtime(Date msgtime) {\n        this.msgtime = msgtime;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ChatExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class ChatExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ChatExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andChatidIsNull() {\n            addCriterion(\"chatId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidIsNotNull() {\n            addCriterion(\"chatId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidEqualTo(Integer value) {\n            addCriterion(\"chatId =\", value, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidNotEqualTo(Integer value) {\n            addCriterion(\"chatId <>\", value, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidGreaterThan(Integer value) {\n            addCriterion(\"chatId >\", value, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"chatId >=\", value, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidLessThan(Integer value) {\n            addCriterion(\"chatId <\", value, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"chatId <=\", value, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidIn(List<Integer> values) {\n            addCriterion(\"chatId in\", values, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidNotIn(List<Integer> values) {\n            addCriterion(\"chatId not in\", values, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidBetween(Integer value1, Integer value2) {\n            addCriterion(\"chatId between\", value1, value2, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andChatidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"chatId not between\", value1, value2, \"chatid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserIsNull() {\n            addCriterion(\"sendUser is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserIsNotNull() {\n            addCriterion(\"sendUser is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserEqualTo(Integer value) {\n            addCriterion(\"sendUser =\", value, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserNotEqualTo(Integer value) {\n            addCriterion(\"sendUser <>\", value, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserGreaterThan(Integer value) {\n            addCriterion(\"sendUser >\", value, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"sendUser >=\", value, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserLessThan(Integer value) {\n            addCriterion(\"sendUser <\", value, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserLessThanOrEqualTo(Integer value) {\n            addCriterion(\"sendUser <=\", value, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserIn(List<Integer> values) {\n            addCriterion(\"sendUser in\", values, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserNotIn(List<Integer> values) {\n            addCriterion(\"sendUser not in\", values, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserBetween(Integer value1, Integer value2) {\n            addCriterion(\"sendUser between\", value1, value2, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSenduserNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"sendUser not between\", value1, value2, \"senduser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserIsNull() {\n            addCriterion(\"receiveUser is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserIsNotNull() {\n            addCriterion(\"receiveUser is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserEqualTo(Integer value) {\n            addCriterion(\"receiveUser =\", value, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserNotEqualTo(Integer value) {\n            addCriterion(\"receiveUser <>\", value, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserGreaterThan(Integer value) {\n            addCriterion(\"receiveUser >\", value, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"receiveUser >=\", value, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserLessThan(Integer value) {\n            addCriterion(\"receiveUser <\", value, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserLessThanOrEqualTo(Integer value) {\n            addCriterion(\"receiveUser <=\", value, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserIn(List<Integer> values) {\n            addCriterion(\"receiveUser in\", values, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserNotIn(List<Integer> values) {\n            addCriterion(\"receiveUser not in\", values, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserBetween(Integer value1, Integer value2) {\n            addCriterion(\"receiveUser between\", value1, value2, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andReceiveuserNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"receiveUser not between\", value1, value2, \"receiveuser\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentIsNull() {\n            addCriterion(\"MsgContent is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentIsNotNull() {\n            addCriterion(\"MsgContent is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentEqualTo(String value) {\n            addCriterion(\"MsgContent =\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentNotEqualTo(String value) {\n            addCriterion(\"MsgContent <>\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentGreaterThan(String value) {\n            addCriterion(\"MsgContent >\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentGreaterThanOrEqualTo(String value) {\n            addCriterion(\"MsgContent >=\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentLessThan(String value) {\n            addCriterion(\"MsgContent <\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentLessThanOrEqualTo(String value) {\n            addCriterion(\"MsgContent <=\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentLike(String value) {\n            addCriterion(\"MsgContent like\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentNotLike(String value) {\n            addCriterion(\"MsgContent not like\", value, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentIn(List<String> values) {\n            addCriterion(\"MsgContent in\", values, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentNotIn(List<String> values) {\n            addCriterion(\"MsgContent not in\", values, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentBetween(String value1, String value2) {\n            addCriterion(\"MsgContent between\", value1, value2, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgcontentNotBetween(String value1, String value2) {\n            addCriterion(\"MsgContent not between\", value1, value2, \"msgcontent\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeIsNull() {\n            addCriterion(\"MsgTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeIsNotNull() {\n            addCriterion(\"MsgTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeEqualTo(Date value) {\n            addCriterion(\"MsgTime =\", value, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeNotEqualTo(Date value) {\n            addCriterion(\"MsgTime <>\", value, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeGreaterThan(Date value) {\n            addCriterion(\"MsgTime >\", value, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"MsgTime >=\", value, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeLessThan(Date value) {\n            addCriterion(\"MsgTime <\", value, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"MsgTime <=\", value, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeIn(List<Date> values) {\n            addCriterion(\"MsgTime in\", values, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeNotIn(List<Date> values) {\n            addCriterion(\"MsgTime not in\", values, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeBetween(Date value1, Date value2) {\n            addCriterion(\"MsgTime between\", value1, value2, \"msgtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andMsgtimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"MsgTime not between\", value1, value2, \"msgtime\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Comment.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class Comment {\n    private Integer commentid;\n\n    private Integer userid;\n\n    private Integer goodsid;\n\n    private Integer point;\n\n    private String content;\n\n    private Date commenttime;\n\n    private String username;\n\n    public Integer getCommentid() {\n        return commentid;\n    }\n\n    public void setCommentid(Integer commentid) {\n        this.commentid = commentid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n\n    public Integer getPoint() {\n        return point;\n    }\n\n    public void setPoint(Integer point) {\n        this.point = point;\n    }\n\n    public String getContent() {\n        return content;\n    }\n\n    public void setContent(String content) {\n        this.content = content == null ? null : content.trim();\n    }\n\n    public Date getCommenttime() {\n        return commenttime;\n    }\n\n    public void setCommenttime(Date commenttime) {\n        this.commenttime = commenttime;\n    }\n\n    public void setUserName(String userName) {this.username=userName;}\n\n    public String getUsername() {return username;}\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/CommentExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class CommentExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public CommentExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andCommentidIsNull() {\n            addCriterion(\"commentId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidIsNotNull() {\n            addCriterion(\"commentId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidEqualTo(Integer value) {\n            addCriterion(\"commentId =\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidNotEqualTo(Integer value) {\n            addCriterion(\"commentId <>\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidGreaterThan(Integer value) {\n            addCriterion(\"commentId >\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"commentId >=\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidLessThan(Integer value) {\n            addCriterion(\"commentId <\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"commentId <=\", value, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidIn(List<Integer> values) {\n            addCriterion(\"commentId in\", values, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidNotIn(List<Integer> values) {\n            addCriterion(\"commentId not in\", values, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidBetween(Integer value1, Integer value2) {\n            addCriterion(\"commentId between\", value1, value2, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommentidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"commentId not between\", value1, value2, \"commentid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointIsNull() {\n            addCriterion(\"point is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointIsNotNull() {\n            addCriterion(\"point is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointEqualTo(Integer value) {\n            addCriterion(\"point =\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointNotEqualTo(Integer value) {\n            addCriterion(\"point <>\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointGreaterThan(Integer value) {\n            addCriterion(\"point >\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"point >=\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointLessThan(Integer value) {\n            addCriterion(\"point <\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointLessThanOrEqualTo(Integer value) {\n            addCriterion(\"point <=\", value, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointIn(List<Integer> values) {\n            addCriterion(\"point in\", values, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointNotIn(List<Integer> values) {\n            addCriterion(\"point not in\", values, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointBetween(Integer value1, Integer value2) {\n            addCriterion(\"point between\", value1, value2, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPointNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"point not between\", value1, value2, \"point\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentIsNull() {\n            addCriterion(\"content is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentIsNotNull() {\n            addCriterion(\"content is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentEqualTo(String value) {\n            addCriterion(\"content =\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotEqualTo(String value) {\n            addCriterion(\"content <>\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentGreaterThan(String value) {\n            addCriterion(\"content >\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentGreaterThanOrEqualTo(String value) {\n            addCriterion(\"content >=\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentLessThan(String value) {\n            addCriterion(\"content <\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentLessThanOrEqualTo(String value) {\n            addCriterion(\"content <=\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentLike(String value) {\n            addCriterion(\"content like\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotLike(String value) {\n            addCriterion(\"content not like\", value, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentIn(List<String> values) {\n            addCriterion(\"content in\", values, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotIn(List<String> values) {\n            addCriterion(\"content not in\", values, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentBetween(String value1, String value2) {\n            addCriterion(\"content between\", value1, value2, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andContentNotBetween(String value1, String value2) {\n            addCriterion(\"content not between\", value1, value2, \"content\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeIsNull() {\n            addCriterion(\"commentTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeIsNotNull() {\n            addCriterion(\"commentTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeEqualTo(Date value) {\n            addCriterion(\"commentTime =\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeNotEqualTo(Date value) {\n            addCriterion(\"commentTime <>\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeGreaterThan(Date value) {\n            addCriterion(\"commentTime >\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"commentTime >=\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeLessThan(Date value) {\n            addCriterion(\"commentTime <\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"commentTime <=\", value, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeIn(List<Date> values) {\n            addCriterion(\"commentTime in\", values, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeNotIn(List<Date> values) {\n            addCriterion(\"commentTime not in\", values, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeBetween(Date value1, Date value2) {\n            addCriterion(\"commentTime between\", value1, value2, \"commenttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCommenttimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"commentTime not between\", value1, value2, \"commenttime\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Deliver.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class Deliver {\n    private Integer deliverid;\n\n    private Integer orderid;\n\n    private Integer sendid;\n\n    public Integer getDeliverid() {\n        return deliverid;\n    }\n\n    public void setDeliverid(Integer deliverid) {\n        this.deliverid = deliverid;\n    }\n\n    public Integer getOrderid() {\n        return orderid;\n    }\n\n    public void setOrderid(Integer orderid) {\n        this.orderid = orderid;\n    }\n\n    public Integer getSendid() {\n        return sendid;\n    }\n\n    public void setSendid(Integer sendid) {\n        this.sendid = sendid;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/DeliverExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class DeliverExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public DeliverExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andDeliveridIsNull() {\n            addCriterion(\"deliverId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridIsNotNull() {\n            addCriterion(\"deliverId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridEqualTo(Integer value) {\n            addCriterion(\"deliverId =\", value, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridNotEqualTo(Integer value) {\n            addCriterion(\"deliverId <>\", value, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridGreaterThan(Integer value) {\n            addCriterion(\"deliverId >\", value, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"deliverId >=\", value, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridLessThan(Integer value) {\n            addCriterion(\"deliverId <\", value, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"deliverId <=\", value, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridIn(List<Integer> values) {\n            addCriterion(\"deliverId in\", values, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridNotIn(List<Integer> values) {\n            addCriterion(\"deliverId not in\", values, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridBetween(Integer value1, Integer value2) {\n            addCriterion(\"deliverId between\", value1, value2, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDeliveridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"deliverId not between\", value1, value2, \"deliverid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNull() {\n            addCriterion(\"orderId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNotNull() {\n            addCriterion(\"orderId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidEqualTo(Integer value) {\n            addCriterion(\"orderId =\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotEqualTo(Integer value) {\n            addCriterion(\"orderId <>\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThan(Integer value) {\n            addCriterion(\"orderId >\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId >=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThan(Integer value) {\n            addCriterion(\"orderId <\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId <=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIn(List<Integer> values) {\n            addCriterion(\"orderId in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotIn(List<Integer> values) {\n            addCriterion(\"orderId not in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId not between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidIsNull() {\n            addCriterion(\"sendId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidIsNotNull() {\n            addCriterion(\"sendId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidEqualTo(Integer value) {\n            addCriterion(\"sendId =\", value, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidNotEqualTo(Integer value) {\n            addCriterion(\"sendId <>\", value, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidGreaterThan(Integer value) {\n            addCriterion(\"sendId >\", value, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"sendId >=\", value, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidLessThan(Integer value) {\n            addCriterion(\"sendId <\", value, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"sendId <=\", value, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidIn(List<Integer> values) {\n            addCriterion(\"sendId in\", values, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidNotIn(List<Integer> values) {\n            addCriterion(\"sendId not in\", values, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidBetween(Integer value1, Integer value2) {\n            addCriterion(\"sendId between\", value1, value2, \"sendid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andSendidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"sendId not between\", value1, value2, \"sendid\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Favorite.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class Favorite extends FavoriteKey {\n    private Date collecttime;\n\n    public Date getCollecttime() {\n        return collecttime;\n    }\n\n    public void setCollecttime(Date collecttime) {\n        this.collecttime = collecttime;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/FavoriteExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class FavoriteExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public FavoriteExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeIsNull() {\n            addCriterion(\"collectTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeIsNotNull() {\n            addCriterion(\"collectTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeEqualTo(Date value) {\n            addCriterion(\"collectTime =\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeNotEqualTo(Date value) {\n            addCriterion(\"collectTime <>\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeGreaterThan(Date value) {\n            addCriterion(\"collectTime >\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"collectTime >=\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeLessThan(Date value) {\n            addCriterion(\"collectTime <\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"collectTime <=\", value, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeIn(List<Date> values) {\n            addCriterion(\"collectTime in\", values, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeNotIn(List<Date> values) {\n            addCriterion(\"collectTime not in\", values, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeBetween(Date value1, Date value2) {\n            addCriterion(\"collectTime between\", value1, value2, \"collecttime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCollecttimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"collectTime not between\", value1, value2, \"collecttime\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/FavoriteKey.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class FavoriteKey {\n    private Integer userid;\n\n    private Integer goodsid;\n\n    public FavoriteKey() {\n    }\n\n    public FavoriteKey(Integer userid, Integer goodsid) {\n\n        this.userid = userid;\n        this.goodsid = goodsid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Goods.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\nimport java.util.List;\n\npublic class Goods {\n    private Integer goodsid;\n\n    private String goodsname;\n\n    private Integer price;\n\n    private Integer num;\n\n    private Date uptime;\n\n    private Integer category;\n\n    private String detailcate;\n\n    private Integer activityid;\n\n    private String description;\n\n    private List<ImagePath> imagePaths;\n\n    private boolean fav;\n\n    private Activity activity;\n\n    private Float newPrice;\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n\n    public String getGoodsname() {\n        return goodsname;\n    }\n\n    public void setGoodsname(String goodsname) {\n        this.goodsname = goodsname == null ? null : goodsname.trim();\n    }\n\n    public Integer getPrice() {\n        return price;\n    }\n\n    public void setPrice(Integer price) {\n        this.price = price;\n    }\n\n    public Integer getNum() {\n        return num;\n    }\n\n    public void setNum(Integer num) {\n        this.num = num;\n    }\n\n    public Date getUptime() {\n        return uptime;\n    }\n\n    public void setUptime(Date uptime) {\n        this.uptime = uptime;\n    }\n\n    public Integer getCategory() {\n        return category;\n    }\n\n    public void setCategory(Integer category) {\n        this.category = category;\n    }\n\n    public String getDetailcate() {\n        return detailcate;\n    }\n\n    public void setDetailcate(String detailcate) {\n        this.detailcate = detailcate == null ? null : detailcate.trim();\n    }\n\n    public Integer getActivityid() {\n        return activityid;\n    }\n\n    public void setActivityid(Integer activityid) {\n        this.activityid = activityid;\n    }\n\n    public String getDescription() {\n        return description;\n    }\n\n    public void setDescription(String description) {\n        this.description = description == null ? null : description.trim();\n    }\n\n    public List<ImagePath> getImagePaths() {\n        return imagePaths;\n    }\n\n    public void setImagePaths(List<ImagePath> imagePaths) {\n        this.imagePaths = imagePaths;\n    }\n\n\n    public boolean isFav() {\n        return fav;\n    }\n\n    public void setFav(boolean fav) {\n        this.fav = fav;\n    }\n\n    public Activity getActivity() {\n        return activity;\n    }\n\n    public void setActivity(Activity activity) {\n        this.activity = activity;\n    }\n\n    public Float getNewPrice() {\n        return newPrice;\n    }\n\n    public void setNewPrice(Float newPrice) {\n        this.newPrice = newPrice;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/GoodsExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class GoodsExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public GoodsExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameIsNull() {\n            addCriterion(\"goodsName is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameIsNotNull() {\n            addCriterion(\"goodsName is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameEqualTo(String value) {\n            addCriterion(\"goodsName =\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotEqualTo(String value) {\n            addCriterion(\"goodsName <>\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameGreaterThan(String value) {\n            addCriterion(\"goodsName >\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"goodsName >=\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameLessThan(String value) {\n            addCriterion(\"goodsName <\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameLessThanOrEqualTo(String value) {\n            addCriterion(\"goodsName <=\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameLike(String value) {\n            addCriterion(\"goodsName like\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotLike(String value) {\n            addCriterion(\"goodsName not like\", value, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameIn(List<String> values) {\n            addCriterion(\"goodsName in\", values, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotIn(List<String> values) {\n            addCriterion(\"goodsName not in\", values, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameBetween(String value1, String value2) {\n            addCriterion(\"goodsName between\", value1, value2, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnameNotBetween(String value1, String value2) {\n            addCriterion(\"goodsName not between\", value1, value2, \"goodsname\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceIsNull() {\n            addCriterion(\"price is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceIsNotNull() {\n            addCriterion(\"price is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceEqualTo(Integer value) {\n            addCriterion(\"price =\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceNotEqualTo(Integer value) {\n            addCriterion(\"price <>\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceGreaterThan(Integer value) {\n            addCriterion(\"price >\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"price >=\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceLessThan(Integer value) {\n            addCriterion(\"price <\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceLessThanOrEqualTo(Integer value) {\n            addCriterion(\"price <=\", value, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceIn(List<Integer> values) {\n            addCriterion(\"price in\", values, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceNotIn(List<Integer> values) {\n            addCriterion(\"price not in\", values, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceBetween(Integer value1, Integer value2) {\n            addCriterion(\"price between\", value1, value2, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPriceNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"price not between\", value1, value2, \"price\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNull() {\n            addCriterion(\"num is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNotNull() {\n            addCriterion(\"num is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumEqualTo(Integer value) {\n            addCriterion(\"num =\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotEqualTo(Integer value) {\n            addCriterion(\"num <>\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThan(Integer value) {\n            addCriterion(\"num >\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"num >=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThan(Integer value) {\n            addCriterion(\"num <\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"num <=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIn(List<Integer> values) {\n            addCriterion(\"num in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotIn(List<Integer> values) {\n            addCriterion(\"num not in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumBetween(Integer value1, Integer value2) {\n            addCriterion(\"num between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"num not between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeIsNull() {\n            addCriterion(\"upTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeIsNotNull() {\n            addCriterion(\"upTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeEqualTo(Date value) {\n            addCriterion(\"upTime =\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeNotEqualTo(Date value) {\n            addCriterion(\"upTime <>\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeGreaterThan(Date value) {\n            addCriterion(\"upTime >\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"upTime >=\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeLessThan(Date value) {\n            addCriterion(\"upTime <\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"upTime <=\", value, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeIn(List<Date> values) {\n            addCriterion(\"upTime in\", values, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeNotIn(List<Date> values) {\n            addCriterion(\"upTime not in\", values, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeBetween(Date value1, Date value2) {\n            addCriterion(\"upTime between\", value1, value2, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUptimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"upTime not between\", value1, value2, \"uptime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryIsNull() {\n            addCriterion(\"category is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryIsNotNull() {\n            addCriterion(\"category is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryEqualTo(Integer value) {\n            addCriterion(\"category =\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryNotEqualTo(Integer value) {\n            addCriterion(\"category <>\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryGreaterThan(Integer value) {\n            addCriterion(\"category >\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"category >=\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryLessThan(Integer value) {\n            addCriterion(\"category <\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryLessThanOrEqualTo(Integer value) {\n            addCriterion(\"category <=\", value, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryIn(List<Integer> values) {\n            addCriterion(\"category in\", values, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryNotIn(List<Integer> values) {\n            addCriterion(\"category not in\", values, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryBetween(Integer value1, Integer value2) {\n            addCriterion(\"category between\", value1, value2, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCategoryNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"category not between\", value1, value2, \"category\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateIsNull() {\n            addCriterion(\"detailCate is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateIsNotNull() {\n            addCriterion(\"detailCate is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateEqualTo(String value) {\n            addCriterion(\"detailCate =\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotEqualTo(String value) {\n            addCriterion(\"detailCate <>\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateGreaterThan(String value) {\n            addCriterion(\"detailCate >\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateGreaterThanOrEqualTo(String value) {\n            addCriterion(\"detailCate >=\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateLessThan(String value) {\n            addCriterion(\"detailCate <\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateLessThanOrEqualTo(String value) {\n            addCriterion(\"detailCate <=\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateLike(String value) {\n            addCriterion(\"detailCate like\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotLike(String value) {\n            addCriterion(\"detailCate not like\", value, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateIn(List<String> values) {\n            addCriterion(\"detailCate in\", values, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotIn(List<String> values) {\n            addCriterion(\"detailCate not in\", values, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateBetween(String value1, String value2) {\n            addCriterion(\"detailCate between\", value1, value2, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andDetailcateNotBetween(String value1, String value2) {\n            addCriterion(\"detailCate not between\", value1, value2, \"detailcate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIsNull() {\n            addCriterion(\"activityId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIsNotNull() {\n            addCriterion(\"activityId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidEqualTo(Integer value) {\n            addCriterion(\"activityId =\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotEqualTo(Integer value) {\n            addCriterion(\"activityId <>\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThan(Integer value) {\n            addCriterion(\"activityId >\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId >=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThan(Integer value) {\n            addCriterion(\"activityId <\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"activityId <=\", value, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidIn(List<Integer> values) {\n            addCriterion(\"activityId in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotIn(List<Integer> values) {\n            addCriterion(\"activityId not in\", values, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andActivityidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"activityId not between\", value1, value2, \"activityid\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/GoodsPrice.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\n/**\n * Created by 文辉 on 2017/7/27.\n */\npublic class GoodsPrice {\n\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ImagePath.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class ImagePath {\n    private Integer pathid;\n\n    private Integer goodid;\n\n    private String path;\n\n    public ImagePath() {\n    }\n\n    public ImagePath(Integer pathid, Integer goodid, String path) {\n\n        this.pathid = pathid;\n        this.goodid = goodid;\n        this.path = path;\n    }\n\n    public Integer getPathid() {\n        return pathid;\n    }\n\n    public void setPathid(Integer pathid) {\n        this.pathid = pathid;\n    }\n\n    public Integer getGoodid() {\n        return goodid;\n    }\n\n    public void setGoodid(Integer goodid) {\n        this.goodid = goodid;\n    }\n\n    public String getPath() {\n        return path;\n    }\n\n    public void setPath(String path) {\n        this.path = path == null ? null : path.trim();\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ImagePathExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ImagePathExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ImagePathExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andPathidIsNull() {\n            addCriterion(\"pathId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidIsNotNull() {\n            addCriterion(\"pathId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidEqualTo(Integer value) {\n            addCriterion(\"pathId =\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidNotEqualTo(Integer value) {\n            addCriterion(\"pathId <>\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidGreaterThan(Integer value) {\n            addCriterion(\"pathId >\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"pathId >=\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidLessThan(Integer value) {\n            addCriterion(\"pathId <\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"pathId <=\", value, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidIn(List<Integer> values) {\n            addCriterion(\"pathId in\", values, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidNotIn(List<Integer> values) {\n            addCriterion(\"pathId not in\", values, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidBetween(Integer value1, Integer value2) {\n            addCriterion(\"pathId between\", value1, value2, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"pathId not between\", value1, value2, \"pathid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidIsNull() {\n            addCriterion(\"goodId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidIsNotNull() {\n            addCriterion(\"goodId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidEqualTo(Integer value) {\n            addCriterion(\"goodId =\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidNotEqualTo(Integer value) {\n            addCriterion(\"goodId <>\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidGreaterThan(Integer value) {\n            addCriterion(\"goodId >\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodId >=\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidLessThan(Integer value) {\n            addCriterion(\"goodId <\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodId <=\", value, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidIn(List<Integer> values) {\n            addCriterion(\"goodId in\", values, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidNotIn(List<Integer> values) {\n            addCriterion(\"goodId not in\", values, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodId between\", value1, value2, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodId not between\", value1, value2, \"goodid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathIsNull() {\n            addCriterion(\"path is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathIsNotNull() {\n            addCriterion(\"path is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathEqualTo(String value) {\n            addCriterion(\"path =\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotEqualTo(String value) {\n            addCriterion(\"path <>\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathGreaterThan(String value) {\n            addCriterion(\"path >\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathGreaterThanOrEqualTo(String value) {\n            addCriterion(\"path >=\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathLessThan(String value) {\n            addCriterion(\"path <\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathLessThanOrEqualTo(String value) {\n            addCriterion(\"path <=\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathLike(String value) {\n            addCriterion(\"path like\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotLike(String value) {\n            addCriterion(\"path not like\", value, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathIn(List<String> values) {\n            addCriterion(\"path in\", values, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotIn(List<String> values) {\n            addCriterion(\"path not in\", values, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathBetween(String value1, String value2) {\n            addCriterion(\"path between\", value1, value2, \"path\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPathNotBetween(String value1, String value2) {\n            addCriterion(\"path not between\", value1, value2, \"path\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/Order.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\nimport java.util.List;\n\npublic class Order {\n    private Integer orderid;\n\n    private Integer userid;\n\n    private Date ordertime;\n\n    private Float oldprice;\n\n    private Float newprice;\n\n    private Boolean ispay;\n\n    private Boolean issend;\n\n    private Boolean isreceive;\n\n    private Boolean iscomplete;\n\n    private Integer addressid;\n\n    private List<Goods> goodsInfo;\n\n    public Order() {\n    }\n\n    private Address address;\n\n    public Order(Integer orderid, Integer userid, Date ordertime, Float oldprice, Float newprice, Boolean ispay, Boolean issend, Boolean isreceive, Boolean iscomplete, Integer addressid, List<Goods> goodsInfo, Address address) {\n        this.orderid = orderid;\n        this.userid = userid;\n        this.ordertime = ordertime;\n        this.oldprice = oldprice;\n        this.newprice = newprice;\n        this.ispay = ispay;\n        this.issend = issend;\n        this.isreceive = isreceive;\n        this.iscomplete = iscomplete;\n        this.addressid = addressid;\n        this.goodsInfo = goodsInfo;\n        this.address = address;\n    }\n\n    public Integer getOrderid() {\n        return orderid;\n    }\n\n    public void setOrderid(Integer orderid) {\n        this.orderid = orderid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Date getOrdertime() {\n        return ordertime;\n    }\n\n    public void setOrdertime(Date ordertime) {\n        this.ordertime = ordertime;\n    }\n\n    public Float getOldprice() {\n        return oldprice;\n    }\n\n    public void setOldprice(Float oldprice) {\n        this.oldprice = oldprice;\n    }\n\n    public Float getNewprice() {\n        return newprice;\n    }\n\n    public void setNewprice(Float newprice) {\n        this.newprice = newprice;\n    }\n\n    public Boolean getIspay() {\n        return ispay;\n    }\n\n    public void setIspay(Boolean ispay) {\n        this.ispay = ispay;\n    }\n\n    public Boolean getIssend() {\n        return issend;\n    }\n\n    public void setIssend(Boolean issend) {\n        this.issend = issend;\n    }\n\n    public Boolean getIsreceive() {\n        return isreceive;\n    }\n\n    public void setIsreceive(Boolean isreceive) {\n        this.isreceive = isreceive;\n    }\n\n    public Boolean getIscomplete() {\n        return iscomplete;\n    }\n\n    public void setIscomplete(Boolean iscomplete) {\n        this.iscomplete = iscomplete;\n    }\n\n    public Integer getAddressid() {\n        return addressid;\n    }\n\n    public void setAddressid(Integer addressid) {\n        this.addressid = addressid;\n    }\n\n    public List<Goods> getGoodsInfo() {\n        return goodsInfo;\n    }\n\n    public void setGoodsInfo(List<Goods> goodsInfo) {\n        this.goodsInfo = goodsInfo;\n    }\n\n    public Address getAddress() {\n        return address;\n    }\n\n    public void setAddress(Address address) {\n        this.address = address;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/OrderExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class OrderExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public OrderExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andOrderidIsNull() {\n            addCriterion(\"orderId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNotNull() {\n            addCriterion(\"orderId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidEqualTo(Integer value) {\n            addCriterion(\"orderId =\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotEqualTo(Integer value) {\n            addCriterion(\"orderId <>\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThan(Integer value) {\n            addCriterion(\"orderId >\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId >=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThan(Integer value) {\n            addCriterion(\"orderId <\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId <=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIn(List<Integer> values) {\n            addCriterion(\"orderId in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotIn(List<Integer> values) {\n            addCriterion(\"orderId not in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId not between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeIsNull() {\n            addCriterion(\"orderTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeIsNotNull() {\n            addCriterion(\"orderTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeEqualTo(Date value) {\n            addCriterion(\"orderTime =\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeNotEqualTo(Date value) {\n            addCriterion(\"orderTime <>\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeGreaterThan(Date value) {\n            addCriterion(\"orderTime >\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"orderTime >=\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeLessThan(Date value) {\n            addCriterion(\"orderTime <\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"orderTime <=\", value, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeIn(List<Date> values) {\n            addCriterion(\"orderTime in\", values, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeNotIn(List<Date> values) {\n            addCriterion(\"orderTime not in\", values, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeBetween(Date value1, Date value2) {\n            addCriterion(\"orderTime between\", value1, value2, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrdertimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"orderTime not between\", value1, value2, \"ordertime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceIsNull() {\n            addCriterion(\"oldPrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceIsNotNull() {\n            addCriterion(\"oldPrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceEqualTo(Float value) {\n            addCriterion(\"oldPrice =\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceNotEqualTo(Float value) {\n            addCriterion(\"oldPrice <>\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceGreaterThan(Float value) {\n            addCriterion(\"oldPrice >\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceGreaterThanOrEqualTo(Float value) {\n            addCriterion(\"oldPrice >=\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceLessThan(Float value) {\n            addCriterion(\"oldPrice <\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceLessThanOrEqualTo(Float value) {\n            addCriterion(\"oldPrice <=\", value, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceIn(List<Float> values) {\n            addCriterion(\"oldPrice in\", values, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceNotIn(List<Float> values) {\n            addCriterion(\"oldPrice not in\", values, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceBetween(Float value1, Float value2) {\n            addCriterion(\"oldPrice between\", value1, value2, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOldpriceNotBetween(Float value1, Float value2) {\n            addCriterion(\"oldPrice not between\", value1, value2, \"oldprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceIsNull() {\n            addCriterion(\"newPrice is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceIsNotNull() {\n            addCriterion(\"newPrice is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceEqualTo(Float value) {\n            addCriterion(\"newPrice =\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceNotEqualTo(Float value) {\n            addCriterion(\"newPrice <>\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceGreaterThan(Float value) {\n            addCriterion(\"newPrice >\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceGreaterThanOrEqualTo(Float value) {\n            addCriterion(\"newPrice >=\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceLessThan(Float value) {\n            addCriterion(\"newPrice <\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceLessThanOrEqualTo(Float value) {\n            addCriterion(\"newPrice <=\", value, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceIn(List<Float> values) {\n            addCriterion(\"newPrice in\", values, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceNotIn(List<Float> values) {\n            addCriterion(\"newPrice not in\", values, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceBetween(Float value1, Float value2) {\n            addCriterion(\"newPrice between\", value1, value2, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNewpriceNotBetween(Float value1, Float value2) {\n            addCriterion(\"newPrice not between\", value1, value2, \"newprice\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayIsNull() {\n            addCriterion(\"isPay is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayIsNotNull() {\n            addCriterion(\"isPay is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayEqualTo(Boolean value) {\n            addCriterion(\"isPay =\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayNotEqualTo(Boolean value) {\n            addCriterion(\"isPay <>\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayGreaterThan(Boolean value) {\n            addCriterion(\"isPay >\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isPay >=\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayLessThan(Boolean value) {\n            addCriterion(\"isPay <\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isPay <=\", value, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayIn(List<Boolean> values) {\n            addCriterion(\"isPay in\", values, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayNotIn(List<Boolean> values) {\n            addCriterion(\"isPay not in\", values, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isPay between\", value1, value2, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIspayNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isPay not between\", value1, value2, \"ispay\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendIsNull() {\n            addCriterion(\"isSend is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendIsNotNull() {\n            addCriterion(\"isSend is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendEqualTo(Boolean value) {\n            addCriterion(\"isSend =\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendNotEqualTo(Boolean value) {\n            addCriterion(\"isSend <>\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendGreaterThan(Boolean value) {\n            addCriterion(\"isSend >\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isSend >=\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendLessThan(Boolean value) {\n            addCriterion(\"isSend <\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isSend <=\", value, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendIn(List<Boolean> values) {\n            addCriterion(\"isSend in\", values, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendNotIn(List<Boolean> values) {\n            addCriterion(\"isSend not in\", values, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isSend between\", value1, value2, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIssendNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isSend not between\", value1, value2, \"issend\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveIsNull() {\n            addCriterion(\"isReceive is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveIsNotNull() {\n            addCriterion(\"isReceive is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveEqualTo(Boolean value) {\n            addCriterion(\"isReceive =\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveNotEqualTo(Boolean value) {\n            addCriterion(\"isReceive <>\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveGreaterThan(Boolean value) {\n            addCriterion(\"isReceive >\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isReceive >=\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveLessThan(Boolean value) {\n            addCriterion(\"isReceive <\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isReceive <=\", value, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveIn(List<Boolean> values) {\n            addCriterion(\"isReceive in\", values, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveNotIn(List<Boolean> values) {\n            addCriterion(\"isReceive not in\", values, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isReceive between\", value1, value2, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIsreceiveNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isReceive not between\", value1, value2, \"isreceive\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteIsNull() {\n            addCriterion(\"isComplete is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteIsNotNull() {\n            addCriterion(\"isComplete is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteEqualTo(Boolean value) {\n            addCriterion(\"isComplete =\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteNotEqualTo(Boolean value) {\n            addCriterion(\"isComplete <>\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteGreaterThan(Boolean value) {\n            addCriterion(\"isComplete >\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteGreaterThanOrEqualTo(Boolean value) {\n            addCriterion(\"isComplete >=\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteLessThan(Boolean value) {\n            addCriterion(\"isComplete <\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteLessThanOrEqualTo(Boolean value) {\n            addCriterion(\"isComplete <=\", value, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteIn(List<Boolean> values) {\n            addCriterion(\"isComplete in\", values, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteNotIn(List<Boolean> values) {\n            addCriterion(\"isComplete not in\", values, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isComplete between\", value1, value2, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andIscompleteNotBetween(Boolean value1, Boolean value2) {\n            addCriterion(\"isComplete not between\", value1, value2, \"iscomplete\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIsNull() {\n            addCriterion(\"addressId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIsNotNull() {\n            addCriterion(\"addressId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidEqualTo(Integer value) {\n            addCriterion(\"addressId =\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotEqualTo(Integer value) {\n            addCriterion(\"addressId <>\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThan(Integer value) {\n            addCriterion(\"addressId >\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"addressId >=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThan(Integer value) {\n            addCriterion(\"addressId <\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"addressId <=\", value, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidIn(List<Integer> values) {\n            addCriterion(\"addressId in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotIn(List<Integer> values) {\n            addCriterion(\"addressId not in\", values, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressId between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andAddressidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"addressId not between\", value1, value2, \"addressid\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/OrderItem.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class OrderItem {\n    private Integer itemid;\n\n    private Integer orderid;\n\n    private Integer goodsid;\n\n    private Integer num;\n\n    public OrderItem() {\n    }\n\n    public OrderItem(Integer itemid, Integer orderid, Integer goodsid, Integer num) {\n\n        this.itemid = itemid;\n        this.orderid = orderid;\n        this.goodsid = goodsid;\n        this.num = num;\n    }\n\n    public Integer getItemid() {\n        return itemid;\n    }\n\n    public void setItemid(Integer itemid) {\n        this.itemid = itemid;\n    }\n\n    public Integer getOrderid() {\n        return orderid;\n    }\n\n    public void setOrderid(Integer orderid) {\n        this.orderid = orderid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n\n    public Integer getNum() {\n        return num;\n    }\n\n    public void setNum(Integer num) {\n        this.num = num;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/OrderItemExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class OrderItemExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public OrderItemExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andItemidIsNull() {\n            addCriterion(\"itemId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidIsNotNull() {\n            addCriterion(\"itemId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidEqualTo(Integer value) {\n            addCriterion(\"itemId =\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidNotEqualTo(Integer value) {\n            addCriterion(\"itemId <>\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidGreaterThan(Integer value) {\n            addCriterion(\"itemId >\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"itemId >=\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidLessThan(Integer value) {\n            addCriterion(\"itemId <\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"itemId <=\", value, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidIn(List<Integer> values) {\n            addCriterion(\"itemId in\", values, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidNotIn(List<Integer> values) {\n            addCriterion(\"itemId not in\", values, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidBetween(Integer value1, Integer value2) {\n            addCriterion(\"itemId between\", value1, value2, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andItemidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"itemId not between\", value1, value2, \"itemid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNull() {\n            addCriterion(\"orderId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIsNotNull() {\n            addCriterion(\"orderId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidEqualTo(Integer value) {\n            addCriterion(\"orderId =\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotEqualTo(Integer value) {\n            addCriterion(\"orderId <>\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThan(Integer value) {\n            addCriterion(\"orderId >\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId >=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThan(Integer value) {\n            addCriterion(\"orderId <\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"orderId <=\", value, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidIn(List<Integer> values) {\n            addCriterion(\"orderId in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotIn(List<Integer> values) {\n            addCriterion(\"orderId not in\", values, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andOrderidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"orderId not between\", value1, value2, \"orderid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsId =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsId <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsId >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsId <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsId <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsId in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsId not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsId not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNull() {\n            addCriterion(\"num is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIsNotNull() {\n            addCriterion(\"num is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumEqualTo(Integer value) {\n            addCriterion(\"num =\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotEqualTo(Integer value) {\n            addCriterion(\"num <>\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThan(Integer value) {\n            addCriterion(\"num >\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"num >=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThan(Integer value) {\n            addCriterion(\"num <\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"num <=\", value, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumIn(List<Integer> values) {\n            addCriterion(\"num in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotIn(List<Integer> values) {\n            addCriterion(\"num not in\", values, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumBetween(Integer value1, Integer value2) {\n            addCriterion(\"num between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n\n        public Criteria andNumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"num not between\", value1, value2, \"num\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ShopCart.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class ShopCart extends ShopCartKey {\n    private Date catedate;\n\n    private Integer goodsnum;\n\n    public Date getCatedate() {\n        return catedate;\n    }\n\n    public void setCatedate(Date catedate) {\n        this.catedate = catedate;\n    }\n\n    public Integer getGoodsnum() {\n        return goodsnum;\n    }\n\n    public void setGoodsnum(Integer goodsnum) {\n        this.goodsnum = goodsnum;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ShopCartExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class ShopCartExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public ShopCartExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNull() {\n            addCriterion(\"goodsid is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIsNotNull() {\n            addCriterion(\"goodsid is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidEqualTo(Integer value) {\n            addCriterion(\"goodsid =\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotEqualTo(Integer value) {\n            addCriterion(\"goodsid <>\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThan(Integer value) {\n            addCriterion(\"goodsid >\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsid >=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThan(Integer value) {\n            addCriterion(\"goodsid <\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsid <=\", value, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidIn(List<Integer> values) {\n            addCriterion(\"goodsid in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotIn(List<Integer> values) {\n            addCriterion(\"goodsid not in\", values, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsid between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsidNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsid not between\", value1, value2, \"goodsid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateIsNull() {\n            addCriterion(\"cateDate is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateIsNotNull() {\n            addCriterion(\"cateDate is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateEqualTo(Date value) {\n            addCriterion(\"cateDate =\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateNotEqualTo(Date value) {\n            addCriterion(\"cateDate <>\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateGreaterThan(Date value) {\n            addCriterion(\"cateDate >\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"cateDate >=\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateLessThan(Date value) {\n            addCriterion(\"cateDate <\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateLessThanOrEqualTo(Date value) {\n            addCriterion(\"cateDate <=\", value, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateIn(List<Date> values) {\n            addCriterion(\"cateDate in\", values, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateNotIn(List<Date> values) {\n            addCriterion(\"cateDate not in\", values, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateBetween(Date value1, Date value2) {\n            addCriterion(\"cateDate between\", value1, value2, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andCatedateNotBetween(Date value1, Date value2) {\n            addCriterion(\"cateDate not between\", value1, value2, \"catedate\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumIsNull() {\n            addCriterion(\"goodsNum is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumIsNotNull() {\n            addCriterion(\"goodsNum is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumEqualTo(Integer value) {\n            addCriterion(\"goodsNum =\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumNotEqualTo(Integer value) {\n            addCriterion(\"goodsNum <>\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumGreaterThan(Integer value) {\n            addCriterion(\"goodsNum >\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsNum >=\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumLessThan(Integer value) {\n            addCriterion(\"goodsNum <\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumLessThanOrEqualTo(Integer value) {\n            addCriterion(\"goodsNum <=\", value, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumIn(List<Integer> values) {\n            addCriterion(\"goodsNum in\", values, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumNotIn(List<Integer> values) {\n            addCriterion(\"goodsNum not in\", values, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsNum between\", value1, value2, \"goodsnum\");\n            return (Criteria) this;\n        }\n\n        public Criteria andGoodsnumNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"goodsNum not between\", value1, value2, \"goodsnum\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/ShopCartKey.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\npublic class ShopCartKey {\n    private Integer userid;\n\n    private Integer goodsid;\n\n    public ShopCartKey() {\n    }\n\n    public ShopCartKey(Integer userid, Integer goodsid) {\n\n        this.userid = userid;\n        this.goodsid = goodsid;\n    }\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public Integer getGoodsid() {\n        return goodsid;\n    }\n\n    public void setGoodsid(Integer goodsid) {\n        this.goodsid = goodsid;\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/User.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.Date;\n\npublic class User {\n    private Integer userid;\n\n    private String username;\n\n    private String password;\n\n    private Date regtime;\n\n    private String email;\n\n    private String telephone;\n\n    public Integer getUserid() {\n        return userid;\n    }\n\n    public void setUserid(Integer userid) {\n        this.userid = userid;\n    }\n\n    public String getUsername() {\n        return username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username == null ? null : username.trim();\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password == null ? null : password.trim();\n    }\n\n    public Date getRegtime() {\n        return regtime;\n    }\n\n    public void setRegtime(Date regtime) {\n        this.regtime = regtime;\n    }\n\n    public String getEmail() {\n        return email;\n    }\n\n    public void setEmail(String email) {\n        this.email = email == null ? null : email.trim();\n    }\n\n    public String getTelephone() {\n        return telephone;\n    }\n\n    public void setTelephone(String telephone) {\n        this.telephone = telephone == null ? null : telephone.trim();\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/entity/UserExample.java",
    "content": "package com.zhang.ssmschoolshop.entity;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class UserExample {\n    protected String orderByClause;\n\n    protected boolean distinct;\n\n    protected List<Criteria> oredCriteria;\n\n    public UserExample() {\n        oredCriteria = new ArrayList<Criteria>();\n    }\n\n    public void setOrderByClause(String orderByClause) {\n        this.orderByClause = orderByClause;\n    }\n\n    public String getOrderByClause() {\n        return orderByClause;\n    }\n\n    public void setDistinct(boolean distinct) {\n        this.distinct = distinct;\n    }\n\n    public boolean isDistinct() {\n        return distinct;\n    }\n\n    public List<Criteria> getOredCriteria() {\n        return oredCriteria;\n    }\n\n    public void or(Criteria criteria) {\n        oredCriteria.add(criteria);\n    }\n\n    public Criteria or() {\n        Criteria criteria = createCriteriaInternal();\n        oredCriteria.add(criteria);\n        return criteria;\n    }\n\n    public Criteria createCriteria() {\n        Criteria criteria = createCriteriaInternal();\n        if (oredCriteria.size() == 0) {\n            oredCriteria.add(criteria);\n        }\n        return criteria;\n    }\n\n    protected Criteria createCriteriaInternal() {\n        Criteria criteria = new Criteria();\n        return criteria;\n    }\n\n    public void clear() {\n        oredCriteria.clear();\n        orderByClause = null;\n        distinct = false;\n    }\n\n    protected abstract static class GeneratedCriteria {\n        protected List<Criterion> criteria;\n\n        protected GeneratedCriteria() {\n            super();\n            criteria = new ArrayList<Criterion>();\n        }\n\n        public boolean isValid() {\n            return criteria.size() > 0;\n        }\n\n        public List<Criterion> getAllCriteria() {\n            return criteria;\n        }\n\n        public List<Criterion> getCriteria() {\n            return criteria;\n        }\n\n        protected void addCriterion(String condition) {\n            if (condition == null) {\n                throw new RuntimeException(\"Value for condition cannot be null\");\n            }\n            criteria.add(new Criterion(condition));\n        }\n\n        protected void addCriterion(String condition, Object value, String property) {\n            if (value == null) {\n                throw new RuntimeException(\"Value for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value));\n        }\n\n        protected void addCriterion(String condition, Object value1, Object value2, String property) {\n            if (value1 == null || value2 == null) {\n                throw new RuntimeException(\"Between values for \" + property + \" cannot be null\");\n            }\n            criteria.add(new Criterion(condition, value1, value2));\n        }\n\n        public Criteria andUseridIsNull() {\n            addCriterion(\"userId is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIsNotNull() {\n            addCriterion(\"userId is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridEqualTo(Integer value) {\n            addCriterion(\"userId =\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotEqualTo(Integer value) {\n            addCriterion(\"userId <>\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThan(Integer value) {\n            addCriterion(\"userId >\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {\n            addCriterion(\"userId >=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThan(Integer value) {\n            addCriterion(\"userId <\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridLessThanOrEqualTo(Integer value) {\n            addCriterion(\"userId <=\", value, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridIn(List<Integer> values) {\n            addCriterion(\"userId in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotIn(List<Integer> values) {\n            addCriterion(\"userId not in\", values, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUseridNotBetween(Integer value1, Integer value2) {\n            addCriterion(\"userId not between\", value1, value2, \"userid\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameIsNull() {\n            addCriterion(\"username is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameIsNotNull() {\n            addCriterion(\"username is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameEqualTo(String value) {\n            addCriterion(\"username =\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotEqualTo(String value) {\n            addCriterion(\"username <>\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameGreaterThan(String value) {\n            addCriterion(\"username >\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameGreaterThanOrEqualTo(String value) {\n            addCriterion(\"username >=\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameLessThan(String value) {\n            addCriterion(\"username <\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameLessThanOrEqualTo(String value) {\n            addCriterion(\"username <=\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameLike(String value) {\n            addCriterion(\"username like\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotLike(String value) {\n            addCriterion(\"username not like\", value, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameIn(List<String> values) {\n            addCriterion(\"username in\", values, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotIn(List<String> values) {\n            addCriterion(\"username not in\", values, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameBetween(String value1, String value2) {\n            addCriterion(\"username between\", value1, value2, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andUsernameNotBetween(String value1, String value2) {\n            addCriterion(\"username not between\", value1, value2, \"username\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNull() {\n            addCriterion(\"password is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIsNotNull() {\n            addCriterion(\"password is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordEqualTo(String value) {\n            addCriterion(\"password =\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotEqualTo(String value) {\n            addCriterion(\"password <>\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThan(String value) {\n            addCriterion(\"password >\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordGreaterThanOrEqualTo(String value) {\n            addCriterion(\"password >=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThan(String value) {\n            addCriterion(\"password <\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLessThanOrEqualTo(String value) {\n            addCriterion(\"password <=\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordLike(String value) {\n            addCriterion(\"password like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotLike(String value) {\n            addCriterion(\"password not like\", value, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordIn(List<String> values) {\n            addCriterion(\"password in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotIn(List<String> values) {\n            addCriterion(\"password not in\", values, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordBetween(String value1, String value2) {\n            addCriterion(\"password between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andPasswordNotBetween(String value1, String value2) {\n            addCriterion(\"password not between\", value1, value2, \"password\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeIsNull() {\n            addCriterion(\"regTime is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeIsNotNull() {\n            addCriterion(\"regTime is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeEqualTo(Date value) {\n            addCriterion(\"regTime =\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeNotEqualTo(Date value) {\n            addCriterion(\"regTime <>\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeGreaterThan(Date value) {\n            addCriterion(\"regTime >\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeGreaterThanOrEqualTo(Date value) {\n            addCriterion(\"regTime >=\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeLessThan(Date value) {\n            addCriterion(\"regTime <\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeLessThanOrEqualTo(Date value) {\n            addCriterion(\"regTime <=\", value, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeIn(List<Date> values) {\n            addCriterion(\"regTime in\", values, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeNotIn(List<Date> values) {\n            addCriterion(\"regTime not in\", values, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeBetween(Date value1, Date value2) {\n            addCriterion(\"regTime between\", value1, value2, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andRegtimeNotBetween(Date value1, Date value2) {\n            addCriterion(\"regTime not between\", value1, value2, \"regtime\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailIsNull() {\n            addCriterion(\"email is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailIsNotNull() {\n            addCriterion(\"email is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailEqualTo(String value) {\n            addCriterion(\"email =\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotEqualTo(String value) {\n            addCriterion(\"email <>\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailGreaterThan(String value) {\n            addCriterion(\"email >\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailGreaterThanOrEqualTo(String value) {\n            addCriterion(\"email >=\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailLessThan(String value) {\n            addCriterion(\"email <\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailLessThanOrEqualTo(String value) {\n            addCriterion(\"email <=\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailLike(String value) {\n            addCriterion(\"email like\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotLike(String value) {\n            addCriterion(\"email not like\", value, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailIn(List<String> values) {\n            addCriterion(\"email in\", values, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotIn(List<String> values) {\n            addCriterion(\"email not in\", values, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailBetween(String value1, String value2) {\n            addCriterion(\"email between\", value1, value2, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andEmailNotBetween(String value1, String value2) {\n            addCriterion(\"email not between\", value1, value2, \"email\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneIsNull() {\n            addCriterion(\"telephone is null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneIsNotNull() {\n            addCriterion(\"telephone is not null\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneEqualTo(String value) {\n            addCriterion(\"telephone =\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotEqualTo(String value) {\n            addCriterion(\"telephone <>\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneGreaterThan(String value) {\n            addCriterion(\"telephone >\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneGreaterThanOrEqualTo(String value) {\n            addCriterion(\"telephone >=\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneLessThan(String value) {\n            addCriterion(\"telephone <\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneLessThanOrEqualTo(String value) {\n            addCriterion(\"telephone <=\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneLike(String value) {\n            addCriterion(\"telephone like\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotLike(String value) {\n            addCriterion(\"telephone not like\", value, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneIn(List<String> values) {\n            addCriterion(\"telephone in\", values, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotIn(List<String> values) {\n            addCriterion(\"telephone not in\", values, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneBetween(String value1, String value2) {\n            addCriterion(\"telephone between\", value1, value2, \"telephone\");\n            return (Criteria) this;\n        }\n\n        public Criteria andTelephoneNotBetween(String value1, String value2) {\n            addCriterion(\"telephone not between\", value1, value2, \"telephone\");\n            return (Criteria) this;\n        }\n    }\n\n    public static class Criteria extends GeneratedCriteria {\n\n        protected Criteria() {\n            super();\n        }\n    }\n\n    public static class Criterion {\n        private String condition;\n\n        private Object value;\n\n        private Object secondValue;\n\n        private boolean noValue;\n\n        private boolean singleValue;\n\n        private boolean betweenValue;\n\n        private boolean listValue;\n\n        private String typeHandler;\n\n        public String getCondition() {\n            return condition;\n        }\n\n        public Object getValue() {\n            return value;\n        }\n\n        public Object getSecondValue() {\n            return secondValue;\n        }\n\n        public boolean isNoValue() {\n            return noValue;\n        }\n\n        public boolean isSingleValue() {\n            return singleValue;\n        }\n\n        public boolean isBetweenValue() {\n            return betweenValue;\n        }\n\n        public boolean isListValue() {\n            return listValue;\n        }\n\n        public String getTypeHandler() {\n            return typeHandler;\n        }\n\n        protected Criterion(String condition) {\n            super();\n            this.condition = condition;\n            this.typeHandler = null;\n            this.noValue = true;\n        }\n\n        protected Criterion(String condition, Object value, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.typeHandler = typeHandler;\n            if (value instanceof List<?>) {\n                this.listValue = true;\n            } else {\n                this.singleValue = true;\n            }\n        }\n\n        protected Criterion(String condition, Object value) {\n            this(condition, value, null);\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {\n            super();\n            this.condition = condition;\n            this.value = value;\n            this.secondValue = secondValue;\n            this.typeHandler = typeHandler;\n            this.betweenValue = true;\n        }\n\n        protected Criterion(String condition, Object value, Object secondValue) {\n            this(condition, value, secondValue, null);\n        }\n    }\n}"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/ActivityService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\n\nimport java.util.List;\n\npublic interface ActivityService {\n    List<Activity> getAllActivity(ActivityExample activityExample);\n\n    void insertActivitySelective(Activity activity);\n\n    Activity selectByKey(Integer activityid);\n\n    void deleteByActivityId(Integer activityid);\n\n//    void updateGoodsActSelective(Goods goods);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/AddressService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\nimport com.zhang.ssmschoolshop.entity.Address;\nimport com.zhang.ssmschoolshop.entity.AddressExample;\n\nimport java.util.List;\n\npublic interface AddressService {\n    public List<Address> getAllAddressByExample(AddressExample addressExample);\n\n    public void updateByPrimaryKeySelective(Address address);\n\n    public void deleteByPrimaryKey(Integer addressid);\n\n    public void insert(Address address);\n\n    public void  insertSelective(Address address);\n\n    public Address selectByPrimaryKey(Integer addressid);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/AdminService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Admin;\n\npublic interface AdminService {\n    public Admin selectByName(Admin admin);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/CateService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Category;\nimport com.zhang.ssmschoolshop.entity.CategoryExample;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"CateService\")\npublic interface CateService {\n    public List<Category> selectByExample(CategoryExample example);\n    public void insertSelective(Category category);\n\n    public List<Category> selectByExampleLimit(CategoryExample digCategoryExample);\n\n    public Category selectById(Integer category);\n\n    public void updateByPrimaryKeySelective(Category category);\n\n    public void deleteByPrimaryKey(Integer cateid);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/ChatService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Chat;\nimport com.zhang.ssmschoolshop.entity.ChatExample;\n\nimport java.util.List;\n\npublic interface ChatService {\n    public void insertChatSelective(Chat chat);\n\n    public List<Chat> selectChatByExample(ChatExample chatExample);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/CommentService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.Comment;\nimport com.zhang.ssmschoolshop.entity.CommentExample;\n\nimport java.util.List;\n\npublic interface CommentService {\n    public void insertSelective(Comment comment);\n\n    public List<Comment> selectByExample(CommentExample commentExample);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/GoodsService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.*;\n\nimport java.util.List;\n\npublic interface GoodsService {\n    public Integer addGoods(Goods goods);\n\n    public void addImagePath(ImagePath imagePath);\n\n    public List<Goods> selectByExample(GoodsExample example);\n\n    public void deleteGoodsById(Integer goodsid);\n\n    public void updateGoodsById(Goods goods);\n\n    public List<ImagePath> findImagePath(Integer goodsid);\n\n    public Goods selectById(Integer goodsid);\n\n    public List<Goods> selectByExampleLimit(GoodsExample digGoodsExample);\n\n    public void addFavorite(Favorite favorite);\n\n    public Favorite selectFavByKey(FavoriteKey favoriteKey);\n\n    public void deleteFavByKey(FavoriteKey favoriteKey);\n\n    public List<Favorite> selectFavByExample(FavoriteExample favoriteExample);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/OrderService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\n\nimport com.zhang.ssmschoolshop.entity.*;\n\nimport java.util.List;\n\n\npublic interface OrderService {\n    public void insertOrder(Order order);\n\n    public void deleteById(Integer orderid);\n\n\n    public List<Order> selectOrderByExample(OrderExample orderExample);\n\n    public List<OrderItem> getOrderItemByExample(OrderItemExample orderItemExample);\n\n    public Address getAddressByKey(Integer addressid);\n\n    public void updateOrderByKey(Order order);\n\n    public Order selectByPrimaryKey(Integer orderid);\n\n    void insertOrderItem(OrderItem orderItem);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/ShopCartService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.ShopCart;\nimport com.zhang.ssmschoolshop.entity.ShopCartExample;\nimport com.zhang.ssmschoolshop.entity.ShopCartKey;\n\nimport java.util.List;\n\npublic interface ShopCartService {\n    public void addShopCart(ShopCart shopCart);\n\n    public List<ShopCart> selectByExample(ShopCartExample shopCartExample);\n\n    public void deleteByKey(ShopCartKey shopCartKey);\n\n    public void updateCartByKey(ShopCart shopCart);\n\n    public ShopCart selectCartByKey(ShopCartKey shopCartKey);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/UserService.java",
    "content": "package com.zhang.ssmschoolshop.service;\n\n\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\n\nimport java.util.List;\n\npublic interface UserService {\n    public User selectByPrimaryKey(int userId);\n    /*public User selectByPrimaryKeyAndPassword(int userId,String password);*/\n    public List<User> selectByExample(UserExample userExample);\n\n    public void insertSelective(User user);\n\n    public void deleteUserById(Integer userid);\n\n    public void updateByPrimaryKeySelective(User user);\n\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/ActivityServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.ActivityMapper;\nimport com.zhang.ssmschoolshop.entity.Activity;\nimport com.zhang.ssmschoolshop.entity.ActivityExample;\nimport com.zhang.ssmschoolshop.service.ActivityService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"activityService\")\npublic class ActivityServiceImpl implements ActivityService {\n\n    @Autowired(required = false)\n    ActivityMapper activityMapper;\n\n    public List<Activity> getAllActivity(ActivityExample activityExample) {\n        return activityMapper.selectByExample(activityExample);\n    }\n\n    @Override\n    public void insertActivitySelective(Activity activity) {\n        activityMapper.insertSelective(activity);\n    }\n\n    @Override\n    public Activity selectByKey(Integer activityid) {\n        return activityMapper.selectByPrimaryKey(activityid);\n    }\n\n    @Override\n    public void deleteByActivityId(Integer activityid) {\n        activityMapper.deleteByPrimaryKey(activityid);\n    }\n\n    /*@Override\n    public void updateGoodsActSelective(Goods goods) {\n\n    }*/\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/AddressServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.AddressMapper;\nimport com.zhang.ssmschoolshop.entity.Address;\nimport com.zhang.ssmschoolshop.entity.AddressExample;\nimport com.zhang.ssmschoolshop.service.AddressService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"addressService\")\npublic class AddressServiceImpl implements AddressService {\n\n    @Autowired(required = false)\n    private AddressMapper addressMapper;\n\n    @Override\n    public List<Address> getAllAddressByExample(AddressExample addressExample) {\n        return addressMapper.selectByExample(addressExample);\n    }\n\n    @Override\n    public void updateByPrimaryKeySelective(Address address) {\n        addressMapper.updateByPrimaryKeySelective(address);\n    }\n\n    @Override\n    public void deleteByPrimaryKey(Integer addressid) {\n        addressMapper.deleteByPrimaryKey(addressid);\n    }\n\n    @Override\n    public void insert(Address address) {\n        addressMapper.insert(address);\n    }\n\n    @Override\n    public void insertSelective(Address address) {\n        addressMapper.insertSelective(address);\n    }\n\n    @Override\n    public Address selectByPrimaryKey(Integer addressid) {\n        return addressMapper.selectByPrimaryKey(addressid);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/AdminServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.AdminMapper;\nimport com.zhang.ssmschoolshop.entity.Admin;\nimport com.zhang.ssmschoolshop.service.AdminService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n@Service(\"adminService\")\npublic class AdminServiceImpl implements AdminService {\n\n    @Autowired(required = false)\n    private AdminMapper adminMapper;\n\n    @Override\n    public Admin selectByName(Admin admin) {\n        return adminMapper.selectByName(admin);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/CateServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.CategoryMapper;\nimport com.zhang.ssmschoolshop.entity.Category;\nimport com.zhang.ssmschoolshop.entity.CategoryExample;\nimport com.zhang.ssmschoolshop.service.CateService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"cateService\")\npublic class CateServiceImpl implements CateService {\n\n    @Autowired(required = false)\n    CategoryMapper categoryMapper;\n\n    @Override\n    public List<Category> selectByExample(CategoryExample example) {\n        return categoryMapper.selectByExample(example);\n    }\n\n    @Override\n    public void insertSelective(Category category) {\n        categoryMapper.insertSelective(category);\n    }\n\n    @Override\n    public List<Category> selectByExampleLimit(CategoryExample digCategoryExample) {\n        return categoryMapper.selectByExampleLimit(digCategoryExample);\n    }\n\n    @Override\n    public Category selectById(Integer category) {\n        return categoryMapper.selectByPrimaryKey(category);\n    }\n\n    @Override\n    public void updateByPrimaryKeySelective(Category category) {\n        categoryMapper.updateByPrimaryKeySelective(category);\n    }\n\n    @Override\n    public void deleteByPrimaryKey(Integer cateid) {\n        categoryMapper.deleteByPrimaryKey(cateid);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/ChatServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.ChatMapper;\nimport com.zhang.ssmschoolshop.entity.Chat;\nimport com.zhang.ssmschoolshop.entity.ChatExample;\nimport com.zhang.ssmschoolshop.service.ChatService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"chatService\")\npublic class ChatServiceImpl implements ChatService {\n\n    @Autowired(required = false)\n    ChatMapper chatMapper;\n\n    @Override\n    public void insertChatSelective(Chat chat) {\n        chatMapper.insertSelective(chat);\n    }\n\n    @Override\n    public List<Chat> selectChatByExample(ChatExample chatExample) {\n        return chatMapper.selectByExample(chatExample);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/CommentServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.CommentMapper;\nimport com.zhang.ssmschoolshop.entity.Comment;\nimport com.zhang.ssmschoolshop.entity.CommentExample;\nimport com.zhang.ssmschoolshop.service.CommentService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"commentService\")\npublic class CommentServiceImpl implements CommentService {\n\n    @Autowired(required = false)\n    private CommentMapper commentMapper;\n\n    @Override\n    public void insertSelective(Comment comment){\n        commentMapper.insertSelective(comment);\n    }\n\n    @Override\n    public List<Comment> selectByExample(CommentExample commentExample) {\n        return commentMapper.selectByExample(commentExample);\n    }\n\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/GoodsServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.FavoriteMapper;\nimport com.zhang.ssmschoolshop.dao.GoodsMapper;\nimport com.zhang.ssmschoolshop.dao.ImagePathMapper;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.GoodsService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"goodsService\")\npublic class GoodsServiceImpl implements GoodsService {\n\n    @Autowired(required = false)\n    GoodsMapper goodsMapper;\n\n    @Autowired(required = false)\n    ImagePathMapper imagePathMapper;\n\n    @Autowired(required = false)\n    FavoriteMapper favoriteMapper;\n\n    @Override\n    public Integer addGoods(Goods goods) {\n        goodsMapper.insertSelective(goods);\n        return goods.getGoodsid();\n    }\n\n    @Override\n    public void addImagePath(ImagePath imagePath) {\n        imagePathMapper.insertSelective(imagePath);\n    }\n\n    @Override\n    public List<Goods> selectByExample(GoodsExample example) {\n        return goodsMapper.selectByExampleWithBLOBs(example);\n    }\n\n    @Override\n    public void deleteGoodsById(Integer goodsid) {\n\n        goodsMapper.deleteByPrimaryKey(goodsid);\n    }\n\n    @Override\n    public void updateGoodsById(Goods goods) {\n        goodsMapper.updateByPrimaryKeySelective(goods);\n    }\n\n    @Override\n    public List<ImagePath> findImagePath(Integer goodsid) {\n        ImagePathExample imagePathExample = new ImagePathExample();\n        imagePathExample.or().andGoodidEqualTo(goodsid);\n\n        return imagePathMapper.selectByExample(imagePathExample);\n    }\n\n    @Override\n    public Goods selectById(Integer goodsid) {\n        return goodsMapper.selectByPrimaryKey(goodsid);\n    }\n\n    @Override\n    public List<Goods> selectByExampleLimit(GoodsExample digGoodsExample) {\n        return goodsMapper.selectByExampleWithBLOBsLimit(digGoodsExample);\n    }\n\n    @Override\n    public void addFavorite(Favorite favorite) {\n        favoriteMapper.insertSelective(favorite);\n    }\n\n    @Override\n    public Favorite selectFavByKey(FavoriteKey favoriteKey) {\n        return favoriteMapper.selectByPrimaryKey(favoriteKey);\n    }\n\n    @Override\n    public void deleteFavByKey(FavoriteKey favoriteKey) {\n        favoriteMapper.deleteByPrimaryKey(favoriteKey);\n    }\n\n    @Override\n    public List<Favorite> selectFavByExample(FavoriteExample favoriteExample) {\n        return favoriteMapper.selectByExample(favoriteExample);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/OrderServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.AddressMapper;\nimport com.zhang.ssmschoolshop.dao.OrderItemMapper;\nimport com.zhang.ssmschoolshop.dao.OrderMapper;\nimport com.zhang.ssmschoolshop.entity.*;\nimport com.zhang.ssmschoolshop.service.OrderService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"orderService\")\npublic class OrderServiceImpl implements OrderService {\n\n    @Autowired(required = false)\n    private OrderMapper orderMapper;\n\n    @Autowired(required = false)\n    private OrderItemMapper orderItemMapper;\n\n    @Autowired(required = false)\n    private AddressMapper addressMapper;\n\n    @Override\n    public void insertOrder(Order order) {\n        orderMapper.insertSelective(order);\n    }\n\n    @Override\n    public void deleteById(Integer orderid) {\n        orderMapper.deleteByPrimaryKey(orderid);\n    }\n\n\n    @Override\n    public List<Order> selectOrderByExample(OrderExample orderExample) {\n        return orderMapper.selectByExample(orderExample);\n    }\n\n    @Override\n    public List<OrderItem> getOrderItemByExample(OrderItemExample orderItemExample) {\n        return orderItemMapper.selectByExample(orderItemExample);\n    }\n\n    @Override\n    public Address getAddressByKey(Integer addressid) {\n        return addressMapper.selectByPrimaryKey(addressid);\n    }\n\n    @Override\n    public void updateOrderByKey(Order order) {\n        orderMapper.updateByPrimaryKeySelective(order);\n    }\n\n    @Override\n    public Order selectByPrimaryKey(Integer orderid) {\n        return orderMapper.selectByPrimaryKey(orderid);\n    }\n\n    @Override\n    public void insertOrderItem(OrderItem orderItem) {\n        orderItemMapper.insertSelective(orderItem);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/ShopCartServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.ShopCartMapper;\nimport com.zhang.ssmschoolshop.entity.ShopCart;\nimport com.zhang.ssmschoolshop.entity.ShopCartExample;\nimport com.zhang.ssmschoolshop.entity.ShopCartKey;\nimport com.zhang.ssmschoolshop.service.ShopCartService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"addShopCart\")\npublic class ShopCartServiceImpl implements ShopCartService {\n\n    @Autowired(required = false)\n    ShopCartMapper shopCartMapper;\n\n    @Override\n    public void addShopCart(ShopCart shopCart) {\n        shopCartMapper.insertSelective(shopCart);\n    }\n\n    @Override\n    public List<ShopCart> selectByExample(ShopCartExample shopCartExample) {\n        return shopCartMapper.selectByExample(shopCartExample);\n    }\n\n    @Override\n    public void deleteByKey(ShopCartKey shopCartKey) {\n        shopCartMapper.deleteByPrimaryKey(shopCartKey);\n    }\n\n    @Override\n    public void updateCartByKey(ShopCart shopCart) {\n        shopCartMapper.updateByPrimaryKeySelective(shopCart);\n    }\n\n    @Override\n    public ShopCart selectCartByKey(ShopCartKey shopCartKey) {\n        return shopCartMapper.selectByPrimaryKey(shopCartKey);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/service/impl/UserServiceImpl.java",
    "content": "package com.zhang.ssmschoolshop.service.impl;\n\n\nimport com.zhang.ssmschoolshop.dao.UserMapper;\nimport com.zhang.ssmschoolshop.entity.User;\nimport com.zhang.ssmschoolshop.entity.UserExample;\nimport com.zhang.ssmschoolshop.service.UserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service(\"userService\")\npublic class UserServiceImpl implements UserService {\n\n    @Autowired(required = false)\n    private UserMapper userMapper;\n\n    @Override\n    public User selectByPrimaryKey(int userId) {\n        return  userMapper.selectByPrimaryKey(userId);\n    }\n\n    @Override\n    public List<User> selectByExample(UserExample userExample) {\n        return userMapper.selectByExample(userExample);\n    }\n\n    @Override\n    public void insertSelective(User user) {\n        userMapper.insertSelective(user);\n    }\n\n    @Override\n    public void deleteUserById(Integer userid) {\n        userMapper.deleteByPrimaryKey(userid);\n    }\n\n    @Override\n    public void updateByPrimaryKeySelective(User user) {\n        userMapper.updateByPrimaryKeySelective(user);\n    }\n\n\n   /* @Override\n    public User selectByPrimaryKeyAndPassword(int userId,String password){return userMapper.selectByPrimaryKeyAndPassword();}*/\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/util/ImageUtil.java",
    "content": "package com.zhang.ssmschoolshop.util;\r\n\r\nimport org.springframework.web.multipart.MultipartFile;\r\n\r\nimport java.io.File;\r\nimport java.io.IOException;\r\nimport java.util.UUID;\r\n\r\n/**\r\n * @author created by Zhangdazhuang\r\n * @version v.0.1\r\n * @Description TODO\r\n * @date 2019/4/30\r\n * @备注\r\n **/\r\npublic class ImageUtil {\r\n\r\n    public static String imagePath(MultipartFile file, String shopName) {\r\n        if (file.isEmpty()) {\r\n            return \"false\";\r\n        }\r\n        int size = (int) file.getSize();\r\n        String path = \"D:/upload\";\r\n        String os = System.getProperty(\"os.name\");\r\n        if(os.toLowerCase().startsWith(\"windows\")){\r\n            path=\"/usr/upload\";\r\n        }\r\n        String fileName=UUID.randomUUID().toString().substring(0,4)+shopName;\r\n        File dest = new File(path + \"/\" +fileName);\r\n        System.out.println(\"保存的绝对路径为:\"+dest);\r\n        if (!dest.getParentFile().exists()) { //判断文件父目录是否存在\r\n            dest.getParentFile().mkdir();\r\n        }\r\n        try {\r\n            //根据系统的不同，保存到不同的路径\r\n            file.transferTo(dest);\r\n            return fileName;\r\n        } catch (IllegalStateException e) {\r\n            // TODO Auto-generated catch block\r\n            e.printStackTrace();\r\n            return \"false\";\r\n        } catch (IOException e) {\r\n            // TODO Auto-generated catch block\r\n            e.printStackTrace();\r\n            return \"false\";\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/util/Msg.java",
    "content": "package com.zhang.ssmschoolshop.util;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * 返回json\n * Created by 文辉 on 2017/7/22.\n */\npublic class Msg {\n    //100-success,200-fail\n    private int code;\n\n    //提示信息\n    private String msg;\n\n    //数据\n    private Map<String, Object> info = new HashMap<String, Object>();\n\n    public static Msg success(String msg) {\n        Msg result = new Msg();\n        result.setCode(100);\n        result.setMsg(msg);\n        return result;\n    }\n\n    public static Msg fail(String msg) {\n        Msg result = new Msg();\n        result.setCode(200);\n        result.setMsg(msg);\n        return result;\n    }\n\n    public Msg add(String key, Object value) {\n        this.getInfo().put(key, value);\n        return this;\n    }\n\n    public int getCode() {\n        return code;\n    }\n\n    public void setCode(int code) {\n        this.code = code;\n    }\n\n    public String getMsg() {\n        return msg;\n    }\n\n    public void setMsg(String msg) {\n        this.msg = msg;\n    }\n\n    public Map<String, Object> getInfo() {\n        return info;\n    }\n\n    public void setInfo(Map<String, Object> info) {\n        this.info = info;\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/java/com/zhang/ssmschoolshop/util/verificate/Verificate.java",
    "content": "package com.zhang.ssmschoolshop.util.verificate;\n\nimport javax.imageio.ImageIO;\nimport java.awt.*;\nimport java.awt.image.BufferedImage;\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.util.Random;\n\n\npublic class Verificate {\n\n        // 验证码图片中可以出现的字符集，可根据需要修改\n        private char mapTable[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',\n                'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };\n\n        /**\n         * 功能:生成彩色验证码图片 参数width为生成图片的宽度,参数height为生成图片的高度,参数为页面的输出流\n         */\n        public String getCertPic(int width, int height,OutputStream os) {\n            if (width <= 0)\n                width = 60;\n            if (height <= 0)\n                height = 20;\n            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);\n            // 获取图形上下文\n            Graphics g = image.getGraphics();\n            // 设定背景色\n            g.setColor(new Color(0x9FDCB1));\n            g.fillRect(0, 0, width, height);\n            // 画边框\n            g.setColor(new Color(0x9FDCB1));\n            g.drawRect(0, 0, width - 1, height - 1);\n            // 取随机产生的认证码\n            String strEnsure = \"\";\n            // 4代表4位验证码,如果要生成更多位的认证码,则加大数值\n            for (int i = 0; i < 4; ++i) {\n                strEnsure += mapTable[(int) (mapTable.length * Math.random())];\n            }\n            // 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句\n            g.setColor(new Color(0x172D44));\n            g.setFont(new Font(\"Atlantic Inline\", Font.PLAIN, 18));\n            String str = strEnsure.substring(0, 1);\n            g.drawString(str, 8, 17);\n            str = strEnsure.substring(1, 2);\n            g.drawString(str, 20, 15);\n            str = strEnsure.substring(2, 3);\n            g.drawString(str, 35, 18);\n            str = strEnsure.substring(3, 4);\n            g.drawString(str, 45, 15);\n            // 随机产生10个干扰点\n            Random rand = new Random();\n            for (int i = 0; i < 10; i++) {\n                int x = rand.nextInt(width);\n                int y = rand.nextInt(height);\n                g.drawOval(x, y, 1, 1);\n            }\n            // 释放图形上下文\n            g.dispose();\n            try {\n                // 输出图像到页面\n                ImageIO.write(image, \"JPEG\", os);\n            } catch (IOException e) {\n                return \"\";\n            }\n            return strEnsure;\n        }\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/resources/applicationContext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:aop=\"http://www.springframework.org/schema/aop\" xmlns:tx=\"http://www.springframework.org/schema/tx\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\n        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd\n        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd\n        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd\n        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd\n        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd\">\n\n    <!--xmlns:context=\"http://www.springframework.org/schema/context\"-->\n    <!--除了控制器都扫描，和SpringMVC相反-->\n    <context:component-scan base-package=\"com.zhang.ssmschoolshop\">\n        <context:exclude-filter type=\"annotation\" expression=\"org.springframework.stereotype.Controller\"></context:exclude-filter>\n    </context:component-scan>\n    <!--Spring的配置文件，这里主要配置和业务逻辑有关的-->\n    <!--数据源，事务控制。。-->\n\n    <context:property-placeholder location=\"classpath:dbconfig.properties\"/>\n    <!--<bean id=\"propertyConfigurer\" class=\"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer\">\n        <property name=\"location\" value=\"classpath:dbconfig.properties\"/>\n    </bean>-->\n    <bean id=\"pooledDataSource\" class=\"com.mchange.v2.c3p0.ComboPooledDataSource\">\n        <property name=\"jdbcUrl\" value=\"${jdbc.jdbcUrl}\"></property>\n        <property name=\"driverClass\" value=\"${jdbc.driverClass}\"></property>\n        <property name=\"user\" value=\"${jdbc.user}\"></property>\n        <property name=\"password\" value=\"${jdbc.password}\"></property>\n    </bean>\n\n    <!--配置和MyBatis的整合-->\n    <bean id=\"sqlSessionFactory\" class=\"org.mybatis.spring.SqlSessionFactoryBean\">\n        <!--指定MyBatis的全局配置文件-->\n        <property name=\"configLocation\" value=\"classpath:mybatis-config.xml\"></property>\n        <property name=\"dataSource\" ref=\"pooledDataSource\"></property>\n        <!--指定mybatis的mapper配置文件-->\n        <property name=\"mapperLocations\" value=\"classpath:mapper/*.xml\"></property>\n    </bean>\n\n    <!--配置扫描器，将MyBatis接口的实现加入到ioc容器中-->\n    <bean class=\"org.mybatis.spring.mapper.MapperScannerConfigurer\">\n        <!--扫描所有dao接口的实现，加入到ioc容器中-->\n        <property name=\"basePackage\" value=\"com.zhang.ssmschoolshop.dao\"></property>\n    </bean>\n    <!--   -->\n\n    <!--事务控制的配置-->\n    <bean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\">\n        <!--控制住数据源-->\n        <property name=\"dataSource\" ref=\"pooledDataSource\"></property>\n    </bean>\n    <!--开启基于注解的事务，使用xml配置形式的事务（必要主要的都是使用配置式）-->\n    <aop:config>\n        <!--切入点表达式-->\n        <aop:pointcut expression=\"execution(* com.zhang.ssmschoolshop.service..*(..))\" id=\"txPoint\" />\n        <!--配置事务增强-->\n        <aop:advisor advice-ref=\"txAdvice\" pointcut-ref=\"txPoint\" />\n    </aop:config>\n\n    <!--配置事务增强，事务如何切入-->\n    <tx:advice id=\"txAdvice\" transaction-manager=\"transactionManager\">\n        <tx:attributes>\n            <!--所有方法都是事务方法-->\n            <tx:method name=\"*\"/>\n            <!--以get开始的所有方法-->\n            <tx:method name=\"get\" read-only=\"true\"/>\n        </tx:attributes>\n    </tx:advice>\n    <!--    -->\n\n    <!--Spring配置文件的核心点（数据源、与MyBatis的整合、事务控制-->\n\n</beans>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/dbconfig.properties",
    "content": "jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/db_shopmaster?useUnicode=true&characterEncoding=utf8\njdbc.driverClass=com.mysql.jdbc.Driver\njdbc.user=root\njdbc.password=123456\n##115.159.219.190   iiotfantas123"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/ActivityMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ActivityMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Activity\">\n    <id column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n    <result column=\"activityName\" jdbcType=\"VARCHAR\" property=\"activityname\" />\n    <result column=\"activityDes\" jdbcType=\"VARCHAR\" property=\"activitydes\" />\n    <result column=\"discount\" jdbcType=\"REAL\" property=\"discount\" />\n    <result column=\"fullPrice\" jdbcType=\"INTEGER\" property=\"fullprice\" />\n    <result column=\"reducePrice\" jdbcType=\"INTEGER\" property=\"reduceprice\" />\n    <result column=\"fullNum\" jdbcType=\"INTEGER\" property=\"fullnum\" />\n    <result column=\"reduceNum\" jdbcType=\"INTEGER\" property=\"reducenum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    activityId, activityName, activityDes, discount, fullPrice, reducePrice, fullNum, \n    reduceNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\">\n    delete from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity (activityId, activityName, activityDes, \n      discount, fullPrice, reducePrice, \n      fullNum, reduceNum)\n    values (#{activityid,jdbcType=INTEGER}, #{activityname,jdbcType=VARCHAR}, #{activitydes,jdbcType=VARCHAR}, \n      #{discount,jdbcType=REAL}, #{fullprice,jdbcType=INTEGER}, #{reduceprice,jdbcType=INTEGER}, \n      #{fullnum,jdbcType=INTEGER}, #{reducenum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"activityname != null\">\n        activityName,\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes,\n      </if>\n      <if test=\"discount != null\">\n        discount,\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice,\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice,\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum,\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"activityname != null\">\n        #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        #{reducenum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultType=\"java.lang.Long\">\n    select count(*) from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update activity\n    <set>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.activityname != null\">\n        activityName = #{record.activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activitydes != null\">\n        activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.discount != null\">\n        discount = #{record.discount,jdbcType=REAL},\n      </if>\n      <if test=\"record.fullprice != null\">\n        fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reduceprice != null\">\n        reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.fullnum != null\">\n        fullNum = #{record.fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reducenum != null\">\n        reduceNum = #{record.reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update activity\n    set activityId = #{record.activityid,jdbcType=INTEGER},\n      activityName = #{record.activityname,jdbcType=VARCHAR},\n      activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      discount = #{record.discount,jdbcType=REAL},\n      fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      fullNum = #{record.fullnum,jdbcType=INTEGER},\n      reduceNum = #{record.reducenum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    <set>\n      <if test=\"activityname != null\">\n        activityName = #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes = #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        discount = #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice = #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice = #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum = #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum = #{reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    set activityName = #{activityname,jdbcType=VARCHAR},\n      activityDes = #{activitydes,jdbcType=VARCHAR},\n      discount = #{discount,jdbcType=REAL},\n      fullPrice = #{fullprice,jdbcType=INTEGER},\n      reducePrice = #{reduceprice,jdbcType=INTEGER},\n      fullNum = #{fullnum,jdbcType=INTEGER},\n      reduceNum = #{reducenum,jdbcType=INTEGER}\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/AddressMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AddressMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Address\">\n    <id column=\"addressID\" jdbcType=\"INTEGER\" property=\"addressid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"province\" jdbcType=\"VARCHAR\" property=\"province\" />\n    <result column=\"city\" jdbcType=\"VARCHAR\" property=\"city\" />\n    <result column=\"county\" jdbcType=\"VARCHAR\" property=\"county\" />\n    <result column=\"detailAddr\" jdbcType=\"VARCHAR\" property=\"detailaddr\" />\n    <result column=\"conName\" jdbcType=\"VARCHAR\" property=\"conname\" />\n    <result column=\"conTel\" jdbcType=\"VARCHAR\" property=\"contel\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    addressID, userId, province, city, county, detailAddr, conName, conTel\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\">\n    delete from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address (addressID, userId, province, \n      city, county, detailAddr, \n      conName, conTel)\n    values (#{addressid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, \n      #{city,jdbcType=VARCHAR}, #{county,jdbcType=VARCHAR}, #{detailaddr,jdbcType=VARCHAR}, \n      #{conname,jdbcType=VARCHAR}, #{contel,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        addressID,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"province != null\">\n        province,\n      </if>\n      <if test=\"city != null\">\n        city,\n      </if>\n      <if test=\"county != null\">\n        county,\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr,\n      </if>\n      <if test=\"conname != null\">\n        conName,\n      </if>\n      <if test=\"contel != null\">\n        conTel,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        #{contel,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultType=\"java.lang.Long\">\n    select count(*) from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update address\n    <set>\n      <if test=\"record.addressid != null\">\n        addressID = #{record.addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.province != null\">\n        province = #{record.province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.city != null\">\n        city = #{record.city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.county != null\">\n        county = #{record.county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.detailaddr != null\">\n        detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.conname != null\">\n        conName = #{record.conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.contel != null\">\n        conTel = #{record.contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update address\n    set addressID = #{record.addressid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      province = #{record.province,jdbcType=VARCHAR},\n      city = #{record.city,jdbcType=VARCHAR},\n      county = #{record.county,jdbcType=VARCHAR},\n      detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      conName = #{record.conname,jdbcType=VARCHAR},\n      conTel = #{record.contel,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        province = #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        city = #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        county = #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        conName = #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        conTel = #{contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    set userId = #{userid,jdbcType=INTEGER},\n      province = #{province,jdbcType=VARCHAR},\n      city = #{city,jdbcType=VARCHAR},\n      county = #{county,jdbcType=VARCHAR},\n      detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      conName = #{conname,jdbcType=VARCHAR},\n      conTel = #{contel,jdbcType=VARCHAR}\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/AdminMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AdminMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Admin\">\n    <id column=\"adminId\" jdbcType=\"INTEGER\" property=\"adminid\" />\n    <result column=\"adminName\" jdbcType=\"VARCHAR\" property=\"adminname\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    adminId, adminName, password\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </select>\n  <select id=\"selectByName\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\" resultMap=\"BaseResultMap\">\n    select\n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminName = #{adminname}\n    <if test=\"password != null\">\n      and password = #{password}\n    </if>\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\">\n    delete from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin (adminId, adminName, password\n      )\n    values (#{adminid,jdbcType=INTEGER}, #{adminname,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        adminId,\n      </if>\n      <if test=\"adminname != null\">\n        adminName,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        #{adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"adminname != null\">\n        #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultType=\"java.lang.Long\">\n    select count(*) from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update admin\n    <set>\n      <if test=\"record.adminid != null\">\n        adminId = #{record.adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.adminname != null\">\n        adminName = #{record.adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update admin\n    set adminId = #{record.adminid,jdbcType=INTEGER},\n      adminName = #{record.adminname,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    <set>\n      <if test=\"adminname != null\">\n        adminName = #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    set adminName = #{adminname,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR}\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/CategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CategoryMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Category\">\n    <id column=\"cateId\" jdbcType=\"INTEGER\" property=\"cateid\" />\n    <result column=\"cateName\" jdbcType=\"VARCHAR\" property=\"catename\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    cateId, cateName\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 8\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\">\n    delete from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category (cateId, cateName)\n    values (#{cateid,jdbcType=INTEGER}, #{catename,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        cateId,\n      </if>\n      <if test=\"catename != null\">\n        cateName,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        #{cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catename != null\">\n        #{catename,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultType=\"java.lang.Long\">\n    select count(*) from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update category\n    <set>\n      <if test=\"record.cateid != null\">\n        cateId = #{record.cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catename != null\">\n        cateName = #{record.catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update category\n    set cateId = #{record.cateid,jdbcType=INTEGER},\n      cateName = #{record.catename,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    <set>\n      <if test=\"catename != null\">\n        cateName = #{catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    set cateName = #{catename,jdbcType=VARCHAR}\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/ChatMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ChatMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Chat\">\n    <id column=\"chatId\" jdbcType=\"INTEGER\" property=\"chatid\" />\n    <result column=\"sendUser\" jdbcType=\"INTEGER\" property=\"senduser\" />\n    <result column=\"receiveUser\" jdbcType=\"INTEGER\" property=\"receiveuser\" />\n    <result column=\"MsgContent\" jdbcType=\"VARCHAR\" property=\"msgcontent\" />\n    <result column=\"MsgTime\" jdbcType=\"TIMESTAMP\" property=\"msgtime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    chatId, sendUser, receiveUser, MsgContent, MsgTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from chat\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from chat\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\">\n    delete from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    insert into chat (chatId, sendUser, receiveUser, \n      MsgContent, MsgTime)\n    values (#{chatid,jdbcType=INTEGER}, #{senduser,jdbcType=INTEGER}, #{receiveuser,jdbcType=INTEGER}, \n      #{msgcontent,jdbcType=VARCHAR}, #{msgtime,jdbcType=TIMESTAMP})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    insert into chat\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"chatid != null\">\n        chatId,\n      </if>\n      <if test=\"senduser != null\">\n        sendUser,\n      </if>\n      <if test=\"receiveuser != null\">\n        receiveUser,\n      </if>\n      <if test=\"msgcontent != null\">\n        MsgContent,\n      </if>\n      <if test=\"msgtime != null\">\n        MsgTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"chatid != null\">\n        #{chatid,jdbcType=INTEGER},\n      </if>\n      <if test=\"senduser != null\">\n        #{senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"receiveuser != null\">\n        #{receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"msgcontent != null\">\n        #{msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"msgtime != null\">\n        #{msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\" resultType=\"java.lang.Long\">\n    select count(*) from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update chat\n    <set>\n      <if test=\"record.chatid != null\">\n        chatId = #{record.chatid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.senduser != null\">\n        sendUser = #{record.senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.receiveuser != null\">\n        receiveUser = #{record.receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.msgcontent != null\">\n        MsgContent = #{record.msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.msgtime != null\">\n        MsgTime = #{record.msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update chat\n    set chatId = #{record.chatid,jdbcType=INTEGER},\n      sendUser = #{record.senduser,jdbcType=INTEGER},\n      receiveUser = #{record.receiveuser,jdbcType=INTEGER},\n      MsgContent = #{record.msgcontent,jdbcType=VARCHAR},\n      MsgTime = #{record.msgtime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    update chat\n    <set>\n      <if test=\"senduser != null\">\n        sendUser = #{senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"receiveuser != null\">\n        receiveUser = #{receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"msgcontent != null\">\n        MsgContent = #{msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"msgtime != null\">\n        MsgTime = #{msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    update chat\n    set sendUser = #{senduser,jdbcType=INTEGER},\n      receiveUser = #{receiveuser,jdbcType=INTEGER},\n      MsgContent = #{msgcontent,jdbcType=VARCHAR},\n      MsgTime = #{msgtime,jdbcType=TIMESTAMP}\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/CommentMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CommentMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Comment\">\n    <id column=\"commentId\" jdbcType=\"INTEGER\" property=\"commentid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"point\" jdbcType=\"INTEGER\" property=\"point\" />\n    <result column=\"content\" jdbcType=\"VARCHAR\" property=\"content\" />\n    <result column=\"commentTime\" jdbcType=\"TIMESTAMP\" property=\"commenttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    commentId, userId, goodsId, point, content, commentTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\">\n    delete from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment (commentId, userId, goodsId, \n      point, content, commentTime\n      )\n    values (#{commentid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{point,jdbcType=INTEGER}, #{content,jdbcType=VARCHAR}, #{commenttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        commentId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"point != null\">\n        point,\n      </if>\n      <if test=\"content != null\">\n        content,\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        #{commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultType=\"java.lang.Long\">\n    select count(*) from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update comment\n    <set>\n      <if test=\"record.commentid != null\">\n        commentId = #{record.commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.point != null\">\n        point = #{record.point,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.content != null\">\n        content = #{record.content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.commenttime != null\">\n        commentTime = #{record.commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update comment\n    set commentId = #{record.commentid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      point = #{record.point,jdbcType=INTEGER},\n      content = #{record.content,jdbcType=VARCHAR},\n      commentTime = #{record.commenttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        point = #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        content = #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime = #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    set userId = #{userid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      point = #{point,jdbcType=INTEGER},\n      content = #{content,jdbcType=VARCHAR},\n      commentTime = #{commenttime,jdbcType=TIMESTAMP}\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/DeliverMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.DeliverMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    <id column=\"deliverId\" jdbcType=\"INTEGER\" property=\"deliverid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"sendId\" jdbcType=\"INTEGER\" property=\"sendid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    deliverId, orderId, sendId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from deliver\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from deliver\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\">\n    delete from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    insert into deliver (deliverId, orderId, sendId\n      )\n    values (#{deliverid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{sendid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    insert into deliver\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"deliverid != null\">\n        deliverId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"sendid != null\">\n        sendId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"deliverid != null\">\n        #{deliverid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"sendid != null\">\n        #{sendid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\" resultType=\"java.lang.Long\">\n    select count(*) from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update deliver\n    <set>\n      <if test=\"record.deliverid != null\">\n        deliverId = #{record.deliverid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.sendid != null\">\n        sendId = #{record.sendid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update deliver\n    set deliverId = #{record.deliverid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      sendId = #{record.sendid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    update deliver\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"sendid != null\">\n        sendId = #{sendid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    update deliver\n    set orderId = #{orderid,jdbcType=INTEGER},\n      sendId = #{sendid,jdbcType=INTEGER}\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/FavoriteMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.FavoriteMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"collectTime\" jdbcType=\"TIMESTAMP\" property=\"collecttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsId, collectTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\">\n    delete from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\">\n    delete from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection (userId, goodsId, collectTime\n      )\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{collecttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"collecttime != null\">\n        collectTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"collecttime != null\">\n        #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultType=\"java.lang.Long\">\n    select count(*) from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update collection\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.collecttime != null\">\n        collectTime = #{record.collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update collection\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      collectTime = #{record.collecttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    <set>\n      <if test=\"collecttime != null\">\n        collectTime = #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    set collectTime = #{collecttime,jdbcType=TIMESTAMP}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/GoodsMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.GoodsMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"goodsName\" jdbcType=\"VARCHAR\" property=\"goodsname\" />\n    <result column=\"price\" jdbcType=\"INTEGER\" property=\"price\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n    <result column=\"upTime\" jdbcType=\"TIMESTAMP\" property=\"uptime\" />\n    <result column=\"category\" jdbcType=\"INTEGER\" property=\"category\" />\n    <result column=\"detailCate\" jdbcType=\"VARCHAR\" property=\"detailcate\" />\n    <result column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n  </resultMap>\n\n  <resultMap extends=\"BaseResultMap\" id=\"ResultMapWithBLOBs\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <result column=\"description\" jdbcType=\"LONGVARCHAR\" property=\"description\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    goodsId, goodsName, price, num, upTime, category, detailCate, activityId\n  </sql>\n  <sql id=\"Blob_Column_List\">\n    description\n  </sql>\n\n  <select id=\"selectByExampleWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n<!-- ,<include refid=\"Blob_Column_List\" />-->\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleWithBLOBsLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 10\n  </select>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"ResultMapWithBLOBs\">\n    select \n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\">\n    delete from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    insert into goods (goodsId, goodsName, price, \n      num, upTime, category, \n      detailCate, activityId, description\n      )\n    values (#{goodsid,jdbcType=INTEGER}, #{goodsname,jdbcType=VARCHAR}, #{price,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER}, #{uptime,jdbcType=TIMESTAMP}, #{category,jdbcType=INTEGER}, \n      #{detailcate,jdbcType=VARCHAR}, #{activityid,jdbcType=INTEGER}, #{description,jdbcType=LONGVARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\" useGeneratedKeys=\"true\" keyProperty=\"goodsid\">\n    insert into goods\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"goodsname != null\">\n        goodsName,\n      </if>\n      <if test=\"price != null\">\n        price,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n      <if test=\"uptime != null\">\n        upTime,\n      </if>\n      <if test=\"category != null\">\n        category,\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate,\n      </if>\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"description != null\">\n        description,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsname != null\">\n        #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultType=\"java.lang.Long\">\n    select count(*) from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update goods\n    <set>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsname != null\">\n        goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.price != null\">\n        price = #{record.price,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.uptime != null\">\n        upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.category != null\">\n        category = #{record.category,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.detailcate != null\">\n        detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.description != null\">\n        description = #{record.description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExampleWithBLOBs\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER},\n      description = #{record.description,jdbcType=LONGVARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    <set>\n      <if test=\"goodsname != null\">\n        goodsName = #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        price = #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        upTime = #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        category = #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate = #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        activityId = #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        description = #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKeyWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER},\n      description = #{description,jdbcType=LONGVARCHAR}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/ImagePathMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ImagePathMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    <id column=\"pathId\" jdbcType=\"INTEGER\" property=\"pathid\" />\n    <result column=\"goodId\" jdbcType=\"INTEGER\" property=\"goodid\" />\n    <result column=\"path\" jdbcType=\"VARCHAR\" property=\"path\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    pathId, goodId, path\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\">\n    delete from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath (pathId, goodId, path\n      )\n    values (#{pathid,jdbcType=INTEGER}, #{goodid,jdbcType=INTEGER}, #{path,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        pathId,\n      </if>\n      <if test=\"goodid != null\">\n        goodId,\n      </if>\n      <if test=\"path != null\">\n        path,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        #{pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodid != null\">\n        #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        #{path,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultType=\"java.lang.Long\">\n    select count(*) from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update imagepath\n    <set>\n      <if test=\"record.pathid != null\">\n        pathId = #{record.pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodid != null\">\n        goodId = #{record.goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.path != null\">\n        path = #{record.path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update imagepath\n    set pathId = #{record.pathid,jdbcType=INTEGER},\n      goodId = #{record.goodid,jdbcType=INTEGER},\n      path = #{record.path,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    <set>\n      <if test=\"goodid != null\">\n        goodId = #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        path = #{path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    set goodId = #{goodid,jdbcType=INTEGER},\n      path = #{path,jdbcType=VARCHAR}\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/OrderItemMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderItemMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    <id column=\"itemId\" jdbcType=\"INTEGER\" property=\"itemid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    itemId, orderId, goodsId, num\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\">\n    delete from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem (itemId, orderId, goodsId, \n      num)\n    values (#{itemid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        itemId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        #{itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultType=\"java.lang.Long\">\n    select count(*) from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update orderitem\n    <set>\n      <if test=\"record.itemid != null\">\n        itemId = #{record.itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update orderitem\n    set itemId = #{record.itemid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n    </set>\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    set orderId = #{orderid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER}\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/OrderMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Order\">\n    <id column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"orderTime\" jdbcType=\"TIMESTAMP\" property=\"ordertime\" />\n    <result column=\"oldPrice\" jdbcType=\"REAL\" property=\"oldprice\" />\n    <result column=\"newPrice\" jdbcType=\"REAL\" property=\"newprice\" />\n    <result column=\"isPay\" jdbcType=\"BIT\" property=\"ispay\" />\n    <result column=\"isSend\" jdbcType=\"BIT\" property=\"issend\" />\n    <result column=\"isReceive\" jdbcType=\"BIT\" property=\"isreceive\" />\n    <result column=\"isComplete\" jdbcType=\"BIT\" property=\"iscomplete\" />\n    <result column=\"addressId\" jdbcType=\"INTEGER\" property=\"addressid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    orderId, userId, orderTime, oldPrice, newPrice, isPay, isSend, isReceive, isComplete, \n    addressId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\">\n    delete from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    insert into indent (orderId, userId, orderTime, \n      oldPrice, newPrice, isPay, isSend, \n      isReceive, isComplete, addressId\n      )\n    values (#{orderid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{ordertime,jdbcType=TIMESTAMP}, \n      #{oldprice,jdbcType=REAL}, #{newprice,jdbcType=REAL}, #{ispay,jdbcType=BIT}, #{issend,jdbcType=BIT}, \n      #{isreceive,jdbcType=BIT}, #{iscomplete,jdbcType=BIT}, #{addressid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\" useGeneratedKeys=\"true\" keyProperty=\"orderid\">\n    insert into indent\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime,\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice,\n      </if>\n      <if test=\"newprice != null\">\n        newPrice,\n      </if>\n      <if test=\"ispay != null\">\n        isPay,\n      </if>\n      <if test=\"issend != null\">\n        isSend,\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive,\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete,\n      </if>\n      <if test=\"addressid != null\">\n        addressId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultType=\"java.lang.Long\">\n    select count(*) from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update indent\n    <set>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.ordertime != null\">\n        orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.oldprice != null\">\n        oldPrice = #{record.oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.newprice != null\">\n        newPrice = #{record.newprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.ispay != null\">\n        isPay = #{record.ispay,jdbcType=BIT},\n      </if>\n      <if test=\"record.issend != null\">\n        isSend = #{record.issend,jdbcType=BIT},\n      </if>\n      <if test=\"record.isreceive != null\">\n        isReceive = #{record.isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"record.iscomplete != null\">\n        isComplete = #{record.iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"record.addressid != null\">\n        addressId = #{record.addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update indent\n    set orderId = #{record.orderid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{record.oldprice,jdbcType=REAL},\n      newPrice = #{record.newprice,jdbcType=REAL},\n      isPay = #{record.ispay,jdbcType=BIT},\n      isSend = #{record.issend,jdbcType=BIT},\n      isReceive = #{record.isreceive,jdbcType=BIT},\n      isComplete = #{record.iscomplete,jdbcType=BIT},\n      addressId = #{record.addressid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice = #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        newPrice = #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        isPay = #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        isSend = #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive = #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete = #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        addressId = #{addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    set userId = #{userid,jdbcType=INTEGER},\n      orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{oldprice,jdbcType=REAL},\n      newPrice = #{newprice,jdbcType=REAL},\n      isPay = #{ispay,jdbcType=BIT},\n      isSend = #{issend,jdbcType=BIT},\n      isReceive = #{isreceive,jdbcType=BIT},\n      isComplete = #{iscomplete,jdbcType=BIT},\n      addressId = #{addressid,jdbcType=INTEGER}\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/ShopCartMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ShopCartMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsid\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"cateDate\" jdbcType=\"TIMESTAMP\" property=\"catedate\" />\n    <result column=\"goodsNum\" jdbcType=\"INTEGER\" property=\"goodsnum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsid, cateDate, goodsNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\">\n    delete from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\">\n    delete from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart (userId, goodsid, cateDate, \n      goodsNum)\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{catedate,jdbcType=TIMESTAMP}, \n      #{goodsnum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsid,\n      </if>\n      <if test=\"catedate != null\">\n        cateDate,\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catedate != null\">\n        #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultType=\"java.lang.Long\">\n    select count(*) from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update shopcart\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsid = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catedate != null\">\n        cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.goodsnum != null\">\n        goodsNum = #{record.goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update shopcart\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsid = #{record.goodsid,jdbcType=INTEGER},\n      cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{record.goodsnum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    <set>\n      <if test=\"catedate != null\">\n        cateDate = #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum = #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    set cateDate = #{catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{goodsnum,jdbcType=INTEGER}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mapper/UserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.UserMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.User\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"username\" jdbcType=\"VARCHAR\" property=\"username\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n    <result column=\"regTime\" jdbcType=\"TIMESTAMP\" property=\"regtime\" />\n    <result column=\"email\" jdbcType=\"VARCHAR\" property=\"email\" />\n    <result column=\"telephone\" jdbcType=\"VARCHAR\" property=\"telephone\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, username, password, regTime, email, telephone\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\">\n    delete from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user (userId, username, password, \n      regTime, email, telephone\n      )\n    values (#{userid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, \n      #{regtime,jdbcType=TIMESTAMP}, #{email,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"username != null\">\n        username,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n      <if test=\"regtime != null\">\n        regTime,\n      </if>\n      <if test=\"email != null\">\n        email,\n      </if>\n      <if test=\"telephone != null\">\n        telephone,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"username != null\">\n        #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        #{telephone,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultType=\"java.lang.Long\">\n    select count(*) from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update user\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.username != null\">\n        username = #{record.username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.regtime != null\">\n        regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.email != null\">\n        email = #{record.email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.telephone != null\">\n        telephone = #{record.telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update user\n    set userId = #{record.userid,jdbcType=INTEGER},\n      username = #{record.username,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR},\n      regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      email = #{record.email,jdbcType=VARCHAR},\n      telephone = #{record.telephone,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    <set>\n      <if test=\"username != null\">\n        username = #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        regTime = #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        email = #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        telephone = #{telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    set username = #{username,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR},\n      regTime = #{regtime,jdbcType=TIMESTAMP},\n      email = #{email,jdbcType=VARCHAR},\n      telephone = #{telephone,jdbcType=VARCHAR}\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/mybatis-config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!DOCTYPE configuration\n        PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\"\n        \"http://mybatis.org/dtd/mybatis-3-config.dtd\">\n<configuration>\n    <settings>\n        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n    </settings>\n\n    <typeAliases>\n        <package name=\"com.zhang.ssmschoolshop.entity\" />\n    </typeAliases>\n\n    <!--分页插件-->\n    <plugins>\n        <plugin interceptor=\"com.github.pagehelper.PageInterceptor\"/>\n    </plugins>\n\n</configuration>"
  },
  {
    "path": "ssmschoolshop/src/main/resources/spring-mvc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:mvc=\"http://www.springframework.org/schema/mvc\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd\">\n\n    <!--SpringMVC的配置，包含网站跳转逻辑的控制配置-->\n    <context:component-scan base-package=\"com.zhang.ssmschoolshop\" use-default-filters=\"false\">\n        <!--只扫描控制器-->\n        <context:include-filter type=\"annotation\" expression=\"org.springframework.stereotype.Controller\"></context:include-filter>\n    </context:component-scan>\n\n    <!--配置视图解析器，方便页面返回-->\n    <bean class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\">\n        <property name=\"prefix\" value=\"/WEB-INF/views/\"></property>\n        <property name=\"suffix\" value=\".jsp\"></property>\n    </bean>\n\n    <!--两个标准配置-->\n    <!--将springmvc不能处理的请求交给tomcat-->\n    <mvc:default-servlet-handler />\n    <!--能支持springMVC的更高级的一些功能，JSP303校验，快捷的ajax。。映射动态请求-->\n    <mvc:annotation-driven />\n\n    <!-- 文件上传配置 -->\n    <bean name=\"multipartResolver\" class=\"org.springframework.web.multipart.commons.CommonsMultipartResolver\">\n        <!-- 默认编码 -->\n        <property name=\"defaultEncoding\" value=\"UTF-8\"/>\n        <!-- 上传文件大小限制为31M，31*1024*1024 -->\n        <property name=\"maxUploadSize\" value=\"32505856\"/>\n        <!-- 内存中的最大值 -->\n        <property name=\"maxInMemorySize\" value=\"4096\"/>\n    </bean>\n\n</beans>"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/activity.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/27\n  Time: 15:45\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <%--<script src=\"${pageContext.request.contextPath}/js/jquery.form.min.js\"></script>--%>\n\n</head>\n<body>\n\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\" class=\"active\">所有活动</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/add\">添加活动</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>--%>\n                        <%--<li><a href=\"login.html\">。。。</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动描述<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">折扣<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">满减<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">满免<span class=\"caret\"></span></a></td>\n                            <td>删除</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"activity\" varStatus=\"num\">\n                            <tr>\n                                <td>${activity.activityid}</td>\n                                <td>${activity.activityname}</td>\n                                <td>${activity.activitydes}</td>\n                                <td>${activity.discount}</td>\n                                <c:if test=\"${!empty activity.fullprice}\">\n                                    <td>满${activity.fullprice}减${activity.reduceprice}</td>\n                                </c:if>\n                                <c:if test=\"${empty activity.fullprice}\">\n                                    <td>无满减</td>\n                                </c:if>\n\n                                <c:if test=\"${!empty activity.fullnum}\">\n                                    <td>满${activity.fullnum}免${activity.reducenum}</td>\n                                </c:if>\n                                <c:if test=\"${empty activity.fullnum}\">\n                                    <td>无满免</td>\n                                </c:if>\n                                <td><a href=\"${pageContext.request.contextPath}/admin/activity/delete?activityid=${activity.activityid}\" class=\"templatemo-delete-btn\" style=\"padding: 0;\">删除</a></td>\n                            </tr>\n                        </c:forEach>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n<!-- Templatemo Script -->\n<script>\n    $(document).ready(function () {\n        // Content widget with background image\n        var imageUrl = $('img.content-bg-img').attr('src');\n        $('.templatemo-content-img-bg').css('background-image', 'url(' + imageUrl + ')');\n        $('img.content-bg-img').hide();\n\n        /*$(\"a\").click(function () {\n            $(this).addClass(\"active\");\n        });*/\n    });\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/addActivity.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/27\n  Time: 18:19\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\">所有活动</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/add\" class=\"active\">添加活动</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>--%>\n                        <%--<li><a href=\"login.html\">。。。</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <h2 class=\"margin-bottom-10\">增加活动</h2>\n                <p>活动的一些基本信息</p>\n                <form action=\"${pageContext.request.contextPath}/admin/activity/addResult\" class=\"templatemo-login-form\" method=\"post\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess\">活动名称</label>\n                            <input type=\"text\" class=\"form-control show-inpu\" id=\"inputWithSuccess\" name=\"activityname\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithDiscount\">折扣</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithDiscount\" name=\"discount\" step=\"0.01\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithFullprice\">满</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithFullprice\" name=\"fullprice\" placeholder=\"￥满减\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithReduceprice\">减</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithReduceprice\" name=\"reduceprice\" placeholder=\"￥满减\">\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithFullnum\">满</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithFullnum\" name=\"fullnum\" placeholder=\"满免\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithReducenum\">免</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithReducenum\" name=\"reducenum\" placeholder=\"满免\">\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputNote\">活动描述</label>\n                            <textarea class=\"form-control\" id=\"inputNote\" rows=\"3\" name=\"activitydes\"></textarea>\n                        </div>\n                    </div>\n\n\n                    <div class=\"form-group text-right\">\n                        <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        <button type=\"reset\" class=\"templatemo-white-button\">重置</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>        <!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/bootstrap-filestyle.min.js\"></script>  <!-- http://markusslima.github.io/bootstrap-filestyle/ -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}', '成功', 'success');\n        });\n    </script>\n</c:if>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/addCategory.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/23\n  Time: 10:02\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n   <%-- <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>--%>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/categery.js\"></script>\n\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-cate\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改分类名称</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"categoryName\" class=\"col-sm-2 control-label\">分类名</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"categoryName\" name=\"categoryName\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveCatename\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"></jsp:include>\n        <div class=\"templatemo-content-container\">\n\n            <div class=\"templatemo-content-widget white-bg\">\n                <div class=\"templatemo-content-widget no-padding\">\n                    <div class=\"panel panel-default table-responsive\">\n                        <table id=\"goodsinfo\" class=\"table  table-bordered templatemo-user-table\">\n                            <thead>\n                            <tr>\n                                <td>分类名</td>\n                                <td >编辑</td>\n                                <td >删除</td>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            <c:forEach items=\"${categoryList}\" var=\"category\">\n                                <tr>\n                                    <td><a href=\"\" class=\"templatemo-link\" cateId=\"${category.cateid}\">${category.catename}</a></td>\n                                    <td><button href=\"\" class=\"templatemo-edit-btn\" name=\"changCate\">编辑</button></td>\n                                    <td><button href=\"\" class=\"templatemo-delete-btn\" name=\"deleteCate\">删除</button></td>\n                                </tr>\n                            </c:forEach>\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n                <label class=\"control-label\" for=\"catename\">添加分类</label>\n                <form action=\"${pageContext.request.contextPath}/admin/goods/addCategoryResult\" method=\"post\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <input type=\"text\" class=\"form-control\" id=\"catename\" name=\"catename\">\n                        </div>\n                        <div class=\"col-lg-4 form-group\">\n                            <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}');\n        });\n    </script>\n</c:if>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/addGoods.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/19\n  Time: 14:55\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    \n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"></jsp:include>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <h2 class=\"margin-bottom-10\">添加商品</h2>\n                <p>商品的一些基本信息</p>\n                <form action=\"${pageContext.request.contextPath}/admin/goods/addGoodsSuccess\" class=\"templatemo-login-form\" method=\"post\" enctype=\"multipart/form-data\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess\">商品名称</label>\n                            <input type=\"text\" class=\"form-control\" id=\"inputWithSuccess\" name=\"goodsname\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithWarning\">价格</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithWarning\" name=\"price\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithError\">数量</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithError\" name=\"num\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputNote\">商品描述</label>\n                            <textarea class=\"form-control\" id=\"inputNote\" rows=\"3\" name=\"description\"></textarea>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 col-md-6 form-group\">\n                            <label class=\"control-label templatemo-block\">类别</label>\n                            <select class=\"form-control\" name=\"category\">\n                                <c:forEach items=\"${categoryList}\" var=\"item\">\n                                    <option value=\"${item.cateid}\">${item.catename}</option>\n                                </c:forEach>\n                            </select>\n                        </div>\n                        <div class=\"col-lg-6 col-md-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess2\">详细类别</label>\n                            <input type=\"text\" class=\"form-control\" id=\"inputWithSuccess2\" name=\"detailcate\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12\">\n                            <label class=\"control-label templatemo-block\">图片</label>\n                            <!-- <input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" class=\"margin-bottom-10\"> -->\n                            <input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" class=\"filestyle\" data-buttonName=\"btn-primary\" data-buttonBefore=\"true\" data-icon=\"false\" multiple=\"multiple\">\n                            <!-- <p>Maximum upload size is 5 MB.</p>  -->\n                        </div>\n                    </div>\n                    <div class=\"form-group text-right\">\n                        <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        <button type=\"reset\" class=\"templatemo-white-button\">重置</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>        <!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/bootstrap-filestyle.min.js\"></script>  <!-- http://markusslima.github.io/bootstrap-filestyle/ -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}', '成功', 'success');\n        });\n    </script>\n</c:if>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/address.jsp",
    "content": "<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/25\n  Time: 15:43\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>Material Design Lite</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/address.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <script src=\"${pageContext.request.contextPath}/js/distpicker.js\"></script>\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n\n        .finish-btn{\n            background-color:#e65b0e !important;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改地址模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-addr\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\" id=\"parentModal\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改地址</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-inline mt-2 mb-4\">\n                    <div  data-toggle=\"distpicker\" data-autoselect=\"3\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\" style=\"padding-left: 28px;padding-top: 10px\">省市区</label>\n                        <select class=\"form-control\" id=\"provinceUpdate\"></select>\n                        <select class=\"form-control\" id=\"cityUpdate\"></select>\n                        <select class=\"form-control\" id=\"countyUpdate\"></select>\n                    </div>\n                </form>\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"detailaddress\" class=\"col-sm-2 control-label\">详细地址</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"detailaddress\" id=\"detailaddress\"/>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">收货人</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"name\" id=\"name\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"telephone\" id=\"telephone\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveAddr\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--添加地址模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"insert-addr\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelInsert\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\" id=\"parentModalInsert\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelInsert\">添加地址</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-inline mt-2 mb-4\">\n                    <div  data-toggle=\"distpicker\" data-autoselect=\"3\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\" style=\"padding-left: 28px;padding-top: 10px\">省市区</label>\n                        <select class=\"form-control\" id=\"provinceInsert\"></select>\n                        <select class=\"form-control\" id=\"cityInsert\"></select>\n                        <select class=\"form-control\" id=\"countyInsert\"></select>\n                    </div>\n                </form>\n                <form class=\"form-horizontal\" id=\"insert-form\" name=\"insert-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"detailaddress\" class=\"col-sm-2 control-label\">详细地址</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"detailaddressInsert\" id=\"detailaddressInsert\"/>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">收货人</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"nameInsert\" id=\"nameInsert\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"telephoneInsert\" id=\"telephoneInsert\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"insertAddr\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">收货地址</span>\n            <div class=\"mdl-layout-spacer\">\n            </div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <button class=\"templatemo-blue-button\" name=\"insertAddr\"><h5>添加地址</h5></button>\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\"></div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n<c:forEach items=\"${addressList}\" var=\"item\">\n        <div class=\"mdl-grid demo-content\" id=\"parent\">\n            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                <div class=\"tab-content\">\n                    <table class=\"table\" cellpadding=\"6\" cellspacing=\"1\" address-id=\"${item.addressid}\" id=\"table\">\n                        <thead>\n                        <th style=\"border: 0px solid transparent\">\n                            <%--<h1>个人信息</h1>--%>\n                        </th>\n                        </thead>\n                        <tbody >\n                        <tr >\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">收货人</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"conname\">${item.conname}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">手机号</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"contel\">${item.contel}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">省</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"province\">${item.province}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">市</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"city\">${item.city}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">县/区</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"county\">${item.county}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">详细地址</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"detailaddr\">${item.detailaddr}</td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </div>\n                <div class=\"mdl-card__actions mdl-card--border\">\n                    <button class=\"templatemo-blue-button\" name=\"changeAddr\"><h5>修改地址</h5></button>\n                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n                    <button class=\"templatemo-blue-button finish-btn\" name=\"deleteAddr\"><h5>删除地址</h5></button>\n                </div>\n            </div>\n        </div>\n</c:forEach>\n       <%-- <div class=\"mdl-grid demo-content\" >\n            <div class=\"demo-charts mdl-color--white  mdl-shadow--2dp mdl-cell mdl-cell--2-col mdl-grid\">\n                <button class=\"templatemo-blue-button\" name=\"insertAddr\"><h5>添加地址</h5></button>\n            </div>\n        </div>--%>\n    </main>\n</div>\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/admin.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"\" class=\"active\">Admin panel</a></li>\n                        <li><a href=\"\">Dashboard</a></li>\n                        <li><a href=\"\">Overview</a></li>\n                        <li><a href=\"login.html\">Sign in form</a></li>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-flex-row flex-content-row\">\n                <div class=\"templatemo-content-widget white-bg col-2\">\n                    <i class=\"fa fa-times\"></i>\n                    <div class=\"square\"></div>\n                    <h2 class=\"templatemo-inline-block\">Visual Admin Template</h2><hr>\n                    <p>Works on all major browsers. IE 10+. Visual Admin is <a href=\"http://www.templatemo.com/tag/admin\" target=\"_parent\">free responsive admin template</a> for everyone. Feel free to use this template for your backend user interfaces. Please tell your friends about <a href=\"http://www.templatemo.com\" target=\"_parent\">templatemo.com</a> website. You may <a href=\"http://www.templatemo.com/contact\" target=\"_parent\">contact us</a> if you have anything to say.</p>\n                    <p>Nunc placerat purus eu tincidunt consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur. Fusce mi lacus, semper sit amet mattis eu.</p>\n                </div>\n                <div class=\"templatemo-content-widget white-bg col-1 text-center\">\n                    <i class=\"fa fa-times\"></i>\n                    <h2 class=\"text-uppercase\">Maris</h2>\n                    <h3 class=\"text-uppercase margin-bottom-10\">Design Project</h3>\n                    <%--<img src=\"${pageContext.request.contextPath}/image/bicycle.jpg\" alt=\"Bicycle\" class=\"img-circle img-thumbnail\">--%>\n                </div>\n                <div class=\"templatemo-content-widget white-bg col-1\">\n                    <i class=\"fa fa-times\"></i>\n                    <h2 class=\"text-uppercase\">Dictum</h2>\n                    <h3 class=\"text-uppercase\">Sedvel Erat Non</h3><hr>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"></div>\n                    </div>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 50%;\"></div>\n                    </div>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"templatemo-flex-row flex-content-row\">\n                <div class=\"col-1\">\n                    <div class=\"templatemo-content-widget orange-bg\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"media\">\n                            <div class=\"media-left\">\n                                <a href=\"#\">\n                                    <%--<img class=\"media-object img-circle\" src=\"images/sunset.jpg\" alt=\"Sunset\">--%>\n                                </a>\n                            </div>\n                            <div class=\"media-body\">\n                                <h2 class=\"media-heading text-uppercase\">Consectur Fusce Enim</h2>\n                                <p>Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur.</p>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"templatemo-content-widget white-bg\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"media\">\n                            <div class=\"media-left\">\n                                <a href=\"#\">\n                                    <%--<img class=\"media-object img-circle\" src=\"images/sunset.jpg\" alt=\"Sunset\">--%>\n                                </a>\n                            </div>\n                            <div class=\"media-body\">\n                                <h2 class=\"media-heading text-uppercase\">Consectur Fusce Enim</h2>\n                                <p>Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur.</p>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"col-1\">\n                    <div class=\"panel panel-default templatemo-content-widget white-bg no-padding templatemo-overflow-hidden\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"panel-heading templatemo-position-relative\"><h2 class=\"text-uppercase\">User Table</h2></div>\n                        <div class=\"table-responsive\">\n                            <table class=\"table table-striped table-bordered\">\n                                <thead>\n                                <tr>\n                                    <td>No.</td>\n                                    <td>First Name</td>\n                                    <td>Last Name</td>\n                                    <td>Username</td>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                <tr>\n                                    <td>1.</td>\n                                    <td>John</td>\n                                    <td>Smith</td>\n                                    <td>@jS</td>\n                                </tr>\n                                <tr>\n                                    <td>2.</td>\n                                    <td>Bill</td>\n                                    <td>Jones</td>\n                                    <td>@bJ</td>\n                                </tr>\n                                <tr>\n                                    <td>3.</td>\n                                    <td>Mary</td>\n                                    <td>James</td>\n                                    <td>@mJ</td>\n                                </tr>\n                                <tr>\n                                    <td>4.</td>\n                                    <td>Steve</td>\n                                    <td>Bride</td>\n                                    <td>@sB</td>\n                                </tr>\n                                <tr>\n                                    <td>5.</td>\n                                    <td>Paul</td>\n                                    <td>Richard</td>\n                                    <td>@pR</td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div> <!-- Second row ends -->\n            <div class=\"templatemo-flex-row flex-content-row templatemo-overflow-hidden\"> <!-- overflow hidden for iPad mini landscape view-->\n                <div class=\"col-1 templatemo-overflow-hidden\">\n                    <div class=\"templatemo-content-widget white-bg templatemo-overflow-hidden\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"templatemo-flex-row flex-content-row\">\n                            <div class=\"col-1 col-lg-6 col-md-12\">\n                                <h2 class=\"text-center\">Modular<span class=\"badge\">new</span></h2>\n                                <div id=\"pie_chart_div\" class=\"templatemo-chart\"></div> <!-- Pie chart div -->\n                            </div>\n                            <div class=\"col-1 col-lg-6 col-md-12\">\n                                <h2 class=\"text-center\">Interactive<span class=\"badge\">new</span></h2>\n                                <div id=\"bar_chart_div\" class=\"templatemo-chart\"></div> <!-- Bar chart div -->\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <footer class=\"text-right\">\n                <p>Copyright &copy; 2084 Company Name\n                    | Designed by <a href=\"http://www.templatemo.com\" target=\"_parent\">templatemo</a></p>\n            </footer>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>      <!-- jQuery -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.min.js\"></script> <!--  jQuery Migrate Plugin -->\n<script src=\"https://www.google.com/jsapi\"></script> <!-- Google Chart -->\n<script>\n    /* Google Chart\n     -------------------------------------------------------------------*/\n    // Load the Visualization API and the piechart package.\n    google.load('visualization', '1.0', {'packages':['corechart']});\n\n    // Set a callback to run when the Google Visualization API is loaded.\n    google.setOnLoadCallback(drawChart);\n\n    // Callback that creates and populates a data table,\n    // instantiates the pie chart, passes in the data and\n    // draws it.\n    function drawChart() {\n\n        // Create the data table.\n        var data = new google.visualization.DataTable();\n        data.addColumn('string', 'Topping');\n        data.addColumn('number', 'Slices');\n        data.addRows([\n            ['Mushrooms', 3],\n            ['Onions', 1],\n            ['Olives', 1],\n            ['Zucchini', 1],\n            ['Pepperoni', 2]\n        ]);\n\n        // Set chart options\n        var options = {'title':'How Much Pizza I Ate Last Night'};\n\n        // Instantiate and draw our chart, passing in some options.\n        var pieChart = new google.visualization.PieChart(document.getElementById('pie_chart_div'));\n        pieChart.draw(data, options);\n\n        var barChart = new google.visualization.BarChart(document.getElementById('bar_chart_div'));\n        barChart.draw(data, options);\n    }\n\n    $(document).ready(function(){\n        if($.browser.mozilla) {\n            //refresh page on browser resize\n            // http://www.sitepoint.com/jquery-refresh-page-browser-resize/\n            $(window).bind('resize', function(e)\n            {\n                if (window.RT) clearTimeout(window.RT);\n                window.RT = setTimeout(function()\n                {\n                    this.location.reload(false); /* false to get page from cache */\n                }, 200);\n            });\n        } else {\n            $(window).resize(function(){\n                drawChart();\n            });\n        }\n    });\n\n</script>\n<script type=\"text/javascript\" src=\"js/templatemo-script.js\"></script>      <!-- Templatemo Script -->\n\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminAllGoods.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/22\n  Time: 13:07\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <%--<script src=\"${pageContext.request.contextPath}/js/jquery.form.min.js\"></script>--%>\n    <style>\n        .show-span {\n            border: none !important;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-goods\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改商品信息</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"goodsid\" class=\"col-sm-2 control-label\">id</label>\n                        <div class=\"col-sm-9\">\n                            <span id=\"goodsid\" class=\"form-control\"></span>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"goodsname\" class=\"col-sm-2 control-label\">商品名</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"goodsname\" id=\"goodsname\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"price\" class=\"col-sm-2 control-label\">价格</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"number\" class=\"form-control\" name=\"price\" id=\"price\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"num\" class=\"col-sm-2 control-label\">数量</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"number\" class=\"form-control\" id=\"num\" name=\"num\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"description\" class=\"col-sm-2 control-label\">描述</label>\n                        <div class=\"col-sm-9\">\n                            <textarea class=\"form-control\" id=\"description\" name=\"description\"></textarea>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"category\" class=\"col-sm-2 control-label\">类别</label>\n                        <div class=\"col-sm-9\">\n                            <select class=\"form-control\" id=\"category\" name=\"category\">\n                                <c:forEach items=\"${categoryList}\" var=\"item\">\n                                    <option value=\"${item.cateid}\">${item.catename}</option>\n                                </c:forEach>\n                            </select>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"detailcate\" class=\"col-sm-2 control-label\">详细分类</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"detailcate\" name=\"detailcate\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveUpdate\">保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--修改商品活动--%>\n<div class=\"modal fade\" id=\"activity-goods\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\">添加商品活动</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"templatemo-login-form\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <div id=\"activity-goodsid\" hidden></div>\n                            <label class=\"control-label\" for=\"activity-id\">活动号</label>\n                            <select class=\"form-control\" id=\"activity-id\">\n                                <option value=\"1\">1</option>\n                                <option value=\"1\">1</option>\n                                <option value=\"1\">1</option>\n                            </select>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"activityname\">活动名称</label>\n                            <span type=\"text\" class=\"form-control show-span\" id=\"activityname\" name=\"activityname\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"discount\">折扣</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"discount\" name=\"discount\" step=\"0.01\"></span>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"fullprice\">满</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"fullprice\" name=\"fullprice\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"reduceprice\">减</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"reduceprice\" name=\"reduceprice\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"fullnum\">满</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"fullnum\" name=\"fullnum\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"reducenum\">免</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"reducenum\" name=\"reducenum\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"activitydes\">活动描述</label>\n                            <span class=\"form-control show-span\" id=\"activitydes\" rows=\"3\" name=\"activitydes\">asfd</span>\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveActivity\">保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动<span class=\"caret\"></span></a></td>\n                            <td>详情</td>\n                            <td>编辑</td>\n                            <td>删除</td>\n                            <td>活动</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <%--<c:forEach items=\"${pageInfo.list}\" var=\"goods\" varStatus=\"num\">\n                            <tr>\n                                <td>${goods.goodsid}</td>\n                                <td>${goods.goodsname}</td>\n                                <td>${goods.price}</td>\n                                <td>${goods.num}</td>\n                                <td>${goods.detailcate}</td>\n                                <td><a href=\"\" class=\"templatemo-link\">详情</a></td>\n                                <td><button href=\"\" class=\"templatemo-edit-btn\">编辑</button></td>\n                                <td><button href=\"\" class=\"templatemo-delete-btn\">删除</button></td>\n                            </tr>\n                        </c:forEach>--%>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    <%--当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录--%>\n                </div>\n                <%--<ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>--%>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/goodsManage.js\"></script>\n<!-- Templatemo Script -->\n<script>\n    $(document).ready(function () {\n        // Content widget with background image\n        var imageUrl = $('img.content-bg-img').attr('src');\n        $('.templatemo-content-img-bg').css('background-image', 'url(' + imageUrl + ')');\n        $('img.content-bg-img').hide();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminAllOrder.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 12:57\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                    <div class=\"margin-bottom-10\">\n                                        <a href=\"${pageContext.request.contextPath}/admin/order/sendGoods?orderid=${orderInfo.orderid}\" class=\"templatemo-edit-btn pull-right\">发货</a>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n                <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                    <div class=\"page-info\" id=\"page-info-area\">\n                        当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                    </div>\n                    <ul class=\"pagination\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\">首页</span>\n                            </a>\n                        </li>\n\n                        <c:if test=\"${pageInfo.hasPreviousPage}\">\n                            <li>\n                                <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                    <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                                </a>\n                            </li>\n                        </c:if>\n\n                        <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                            <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                            </c:if>\n                            <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                            </c:if>\n                        </c:forEach>\n\n                        <c:if test=\"${pageInfo.hasNextPage}\">\n                            <li>\n                                <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                    <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                                </a>\n                            </li>\n                        </c:if>\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\">末页</span>\n                            </a>\n                        </li>\n                    </ul>\n                </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminChat.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 22:28\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>后台管理</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/mqttws31.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chat.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\"\n          href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/templatemo-style.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/adminchat.js\"></script>\n    <style>\n        .templatemo-content-widget {\n            padding: 30px 0 0 0 !important;\n        }\n        .white-bg {\n            /*background-color: #f8ffff !important;*/\n            background-color: #fbffff !important;\n        }\n        .templatemo-content-container {\n            padding: 0 !important;\n        }\n    </style>\n</head>\n<body>\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/chat\" class=\"active\">聊天</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/order/receiver\">未收货</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/order/complete\">已完成</a></li>--%>\n                        <%--<li><a href=\"login.html\">Sign in form</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <div id=\"main\">\n                    <div class=\"chat-div\">\n                        <div class=\"chat-list\">\n                            <div class=\"a-far\">\n                                <%--<c:forEach items=\"${chatuserlist}\" var=\"userinfo\">\n                                    <a class=\"a-card\" data-userid=\"${userinfo.userid}\">\n                                        <div class=\"card\">\n                                                ${userinfo.username}\n                                        </div>\n                                    </a>\n                                </c:forEach>--%>\n                            </div>\n                        </div>\n                        <div class=\"chat\">\n                            <div class=\"chat-name\">\n                                <div class=\"chat-name-detail\">\n                                    <h3 id=\"receive\">\n                                        ${sendto.username}\n                                    </h3>\n                                    <span id=\"receiveId\" hidden>${sendto.userid}</span>\n                                    <h3 id=\"send\" hidden>\n                                        客服\n                                    </h3>\n                                    <span id=\"sendId\" hidden>5</span>\n\n                                    <%--<%String clientID=request.getParameter(\"clientID\");\n                                        String toID=request.getParameter(\"toID\");\n                                    %>\n                                       <h3 id=\"receive\">\n                                           <%=toID%>\n                                       </h3>\n                                       <span id=\"receiveId\" hidden><%=toID%></span>\n                                       <h3 id=\"send\" hidden>\n                                           <%=clientID%>\n                                       </h3>\n                                       <span id=\"sendId\" hidden><%=clientID%></span>--%>\n                                </div>\n                            </div>\n                            <div class=\"chat-content\">\n                                <div class=\"chat-content-body\">\n                                    <%--<div class=\"chat-message1 chat-message\">\n                                        <div class=\"chat-message-content1\">\n                                            <span class=\"glyphicon glyphicon-triangle-left message-icon-left\" aria-hidden=\"true\"></span>\n                                            <div class=\"info-content\">\n                                                你好666\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <div class=\"clear-float\"></div>\n                                    <div class=\"chat-message2 chat-message\">\n                                        <div class=\"chat-message-content2\">\n                                            <span class=\"glyphicon glyphicon-triangle-right message-icon-right\"\n                                                  aria-hidden=\"true\"></span>\n                                            <div class=\"info-content\">\n                                                东大咸鱼太棒了！\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <div class=\"clear-float\"></div>--%>\n                                </div>\n                            </div>\n                            <div class=\"chat-input\">\n                                <div class=\"form-div\">\n                                    <div class=\"form-inline\">\n                                        <div class=\"form-group input-div\">\n\t\t\t\t\t\t\t\t<textarea class=\"form-control\" name=\"message\"\n                                          id=\"input-message\" rows=\"2\"></textarea>\n                                        </div>\n                                        <div class=\"form-group send-div\">\n                                            <input class=\"form-control btn btn-primary btn-block\"\n                                                   id=\"send-message\" type=\"submit\" value=\"发送\">\n                                            <!-- <button class=\"form-control btn-block\" id=\"send-message\">发送</button> -->\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminLogin.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/19\n  Time: 9:08\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>管理员登录</title>\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n</head>\n<body class=\"light-gray-bg\">\n<div class=\"templatemo-content-widget templatemo-login-widget white-bg\">\n    <header class=\"text-center\">\n        <div class=\"square\"></div>\n        <h1>管理员登录</h1>\n    </header>\n    <form action=\"${pageContext.request.contextPath}/admin/confirmLogin\" class=\"templatemo-login-form\" method=\"post\">\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <div class=\"input-group-addon\"><i class=\"fa fa-user fa-fw\"></i></div>\n                <input type=\"text\" class=\"form-control\" placeholder=\"用户名\" name=\"adminname\">\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <div class=\"input-group-addon\"><i class=\"fa fa-key fa-fw\"></i></div>\n                <input type=\"password\" class=\"form-control\" placeholder=\"密码\" name=\"password\">\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"checkbox squaredTwo\">\n                <input type=\"checkbox\" id=\"c1\" name=\"cc\" />\n                <%--<label for=\"c1\"><span></span>记住密码</label>--%>\n                <span class=\"error-msg\">${errorMsg}</span>\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <button type=\"submit\" class=\"templatemo-blue-button width-100\">登录</button>\n        </div>\n    </form>\n</div>\n<!-- <div class=\"templatemo-content-widget templatemo-login-widget templatemo-register-widget white-bg\">\n    <p>Not a registered user yet? <strong><a href=\"#\" class=\"blue-text\">Sign up now!</a></strong></p>\n</div> -->\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminOrderComplete.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 18:56\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminOrderNav.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 13:56\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-top-nav-container\">\n    <div class=\"row\">\n        <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n            <ul class=\"text-uppercase\">\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/send\">未发货</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/receiver\">未收货</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/complete\">已完成</a></li>\n                <%--<li><a href=\"login.html\">Sign in form</a></li>--%>\n            </ul>\n        </nav>\n    </div>\n</div>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/adminOrderReceive.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 18:52\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/category.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 19:32\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>淘一淘类别</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <style>\n        .like-button {\n            left: 80% !important;\n            top: 70% !important;\n        }\n        .data>ul {\n            padding: 0;\n        }\n        .page-div {\n            margin-top: 10px;\n        }\n        .page-info {\n            padding: 35px 35px 35px 55px;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"content\">\n        <div class=\"module\">\n            <div class=\"\">\n                <h3>\n                    类别><span style=\"color: red;\">${cate}</span>\n                </h3>\n                <hr>\n            </div>\n\n            <div class=\"bd\">\n                <div class=\"data\">\n                    <ul>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                            <li class=\"data-item-li\">\n                                <div class=\"to-big\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\" width=\"260px\" height=\"260px\" alt=\"\"/>\n                                    </a>\n                                </div>\n                                <p class=\"text-right\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                </p>\n                                <div class=\"text-right\">\n                                    <b>￥${goods.price}</b>\n                                </div>\n                                <div>\n                                    <c:if test=\"${goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <c:if test=\"${!goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                </div>\n                            </li>\n                        </c:forEach>\n\n                        <div class=\"clear-float\" style=\"clear: both;\"></div>\n                    </ul>\n                </div>\n                <div class=\"row page-div\">\n                    <div class=\"col-md-5 page-info\">\n                        当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                    </div>\n                    <div class=\"col-md-6\">\n                        <nav aria-label=\"Page navigation\">\n                            <ul class=\"pagination pagination-lg\">\n\n                                <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                    <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                        <li class=\"active\"><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                    <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                        <li><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                </c:forEach>\n\n                                <c:if test=\"${pageInfo.hasNextPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasNextPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n                            </ul>\n                        </nav>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/chat.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 21:03\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-聊天</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/mqttws31.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chat.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\"\n          href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/send.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"chat-div\">\n        <div class=\"chat-list\">\n            <div class=\"a-far\">\n                <%--<c:forEach items=\"${chatuserlist}\" var=\"userinfo\">\n                    <a class=\"a-card\" data-userid=\"${userinfo.userid}\">\n                        <div class=\"card\">\n                            ${userinfo.username}\n                        </div>\n                    </a>\n                </c:forEach>--%>\n            </div>\n            <%--<div class=\"list-item\" id=\"list-item0\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item1\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item2\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item3\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item4\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item5\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item6\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item7\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item8\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>--%>\n        </div>\n        <div class=\"chat\">\n            <div class=\"chat-name\">\n                <div class=\"chat-name-detail\">\n                    <h3 id=\"receive\">\n                        ${sendto.username}\n                    </h3>\n                    <span id=\"receiveId\" hidden>${sendto.userid}</span>\n                    <h3 id=\"send\" hidden>\n                        ${sessionScope.user.username}\n                    </h3>\n                    <span id=\"sendId\" hidden>${sessionScope.user.userid}</span>\n\n                    <%--<%String clientID=request.getParameter(\"clientID\");\n                        String toID=request.getParameter(\"toID\");\n                    %>\n                       <h3 id=\"receive\">\n                           <%=toID%>\n                       </h3>\n                       <span id=\"receiveId\" hidden><%=toID%></span>\n                       <h3 id=\"send\" hidden>\n                           <%=clientID%>\n                       </h3>\n                       <span id=\"sendId\" hidden><%=clientID%></span>--%>\n                </div>\n            </div>\n            <div class=\"chat-content\">\n                <div class=\"chat-content-body\">\n                    <%--<div class=\"chat-message1 chat-message\">\n                        <div class=\"chat-message-content1\">\n                            <span class=\"glyphicon glyphicon-triangle-left message-icon-left\" aria-hidden=\"true\"></span>\n                            <div class=\"info-content\">\n                                你好666\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"clear-float\"></div>\n                    <div class=\"chat-message2 chat-message\">\n                        <div class=\"chat-message-content2\">\n                            <span class=\"glyphicon glyphicon-triangle-right message-icon-right\"\n                                  aria-hidden=\"true\"></span>\n                            <div class=\"info-content\">\n                                东大咸鱼太棒了！\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"clear-float\"></div>--%>\n                </div>\n            </div>\n            <div class=\"chat-input\">\n                <div class=\"form-div\">\n                    <div class=\"form-inline\">\n                        <div class=\"form-group input-div\">\n\t\t\t\t\t\t\t\t<textarea class=\"form-control\" name=\"message\"\n                                          id=\"input-message\" rows=\"2\"></textarea>\n                        </div>\n                        <div class=\"form-group send-div\">\n                            <input class=\"form-control btn btn-primary btn-block\"\n                                   id=\"send-message\" type=\"submit\" value=\"发送\">\n                            <!-- <button class=\"form-control btn-block\" id=\"send-message\">发送</button> -->\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/chatrobot.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-小淘</title>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chatrobot.css\">\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css\">\n    <!-- <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\"> -->\n    <!-- <script src=\"https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script> -->\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/chat.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"chat-div\">\n        <div class=\"chat\">\n            <div class=\"chat-name\">\n                <div class=\"chat-name-detail\">\n                    <h3 id=\"receive\"><i>小淘</i></h3>\n                </div>\n            </div>\n            <div class=\"chat-content\">\n                <div class=\"chat-content-body\">\n                </div>\n            </div>\n            <div class=\"chat-input\">\n                <div class=\"form-div\">\n                    <div class=\"form-inline\">\n                        <div class=\"form-group input-div\">\n                            <textarea class=\"form-control\" name=\"message\" id=\"input-message\" rows=\"2\"></textarea>\n                        </div>\n                        <div class=\"form-group send-div\">\n                            <input class=\"form-control btn btn-primary btn-block\" id=\"send-message\" type=\"submit\" value=\"发送\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/detail.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!doctype html>\n<html class=\"\" lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n    <title>长理商城-${goodsInfo['goods'].goodsname}</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!-- all css here -->\n    <!-- bootstrap v3.3.6 css -->\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\">\n\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\">\n    <!-- style css -->\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/style.css\">\n\n    <link href=\"${pageContext.request.contextPath}/css/shopdetail.css\" rel=\"stylesheet\">\n    <!-- <script src=\"./detail/js/jquery.js\"></script> -->\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n\n    <%--<script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>--%>\n\n    <!-- bootstrap js -->\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/detail.js\"></script>\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            var showproduct = {\n                \"boxid\": \"showbox\",\n                \"sumid\": \"showsum\",\n                \"boxw\": 400,\n                \"boxh\": 550,\n                \"sumw\": 60, //列表每个宽度,该版本中请把宽高填写成一样\n                \"sumh\": 60, //列表每个高度,该版本中请把宽高填写成一样\n                \"sumi\": 7, //列表间隔\n                \"sums\": 5, //列表显示个数\n                \"sumsel\": \"sel\",\n                \"sumborder\": 1, //列表边框，没有边框填写0，边框在css中修改\n                \"lastid\": \"showlast\",\n                \"nextid\": \"shownext\"\n            }; //参数定义\n            $.ljsGlasses.pcGlasses(showproduct); //方法调用，务必在加载完后执行\n\n            $(function () {\n\n                $('.tabs a').click(function () {\n\n                    var $this = $(this);\n                    $('.panel').hide();\n                    $('.tabs a.active').removeClass('active');\n                    $this.addClass('active').blur();\n                    var panel = $this.attr(\"href\");\n                    $(panel).show();\n                    return fasle; //告诉浏览器  不要纸箱这个链接\n                }); //end click\n\n\n                $(\".tabs li:first a\").click(); //web 浏览器，单击第一个标签吧\n\n            }); //end ready\n\n            $(\".centerbox li\").click(function () {\n                $(\"li\").removeClass(\"now\");\n                $(this).addClass(\"now\");\n\n            });\n\n            /*$(\"#chatto\").click(function () {\n                $.ajax({\n                    url: \"/shop/chat/\", //把表单数据发送到ajax.jsp\n                    type: \"POST\",\n                    data: {\n                        sendto: 5\n                    },\n                    error: function (request) {\n                        alert(result.msg);\n                    },\n                    success: function (result) {\n                    }\n                });\n            });*/\n\n            $('.fav-button').click(function(){\n                //$(this).removeClass(\"glyphicon-heart-empty\");\n                var goodsId = $(this).attr('data-id');\n                var isChangeBtn = true;\n                if(!$(this).children(\"i\").hasClass('fa-heart')) {\n                    //收藏\n                    $.ajax({\n                        url:\"/collect\",\n                        type:\"POST\",\n                        data:{\n                            goodsid:goodsId\n                        },\n                        success:function (result) {\n                            //收藏成功\n                            if(result.code === 200){\n                                location.href = \"/login\";\n                                isChangeBtn = false;\n                            }\n                        },\n                        error:function () {\n                            alert(\"收藏失败\");\n                        }\n                    })\n                } else {\n                    //取消收藏\n                    $.ajax({\n                        url:\"/deleteCollect\",\n                        type:\"POST\",\n                        data:{\n                            goodsid:goodsId\n                        },\n                        success:function (result) {\n                            //取消收藏成功\n                            if(result.code === 200){\n                                location.href = \"/login\";\n                                isChangeBtn = false;\n                            }\n                        },\n                        error:function () {\n                            alert(\"取消收藏失败\");\n                        }\n                    })\n                }\n\n                /*$.post(\"servlet/CollectServlet\", {\n                 goodsId: goodsId,\n                 });\n                 // alert(\"商品已加入购物车！\");*/\n\n                if(isChangeBtn) {\n                    $(this).children(\"i\").toggleClass(\"fa-heart fa-heart-o\");\n                    var likeContent = $(this).children(\"span\").text();\n                    if(likeContent == '收藏'){\n                        $(this).children(\"span\").text('取消收藏');\n                    } else {\n                        $(this).children(\"span\").text('收藏');\n                    }\n                }\n            });\n        });\n    </script>\n    <style>\n        .head{\n            width: 45px !important;\n            background: rgba(0,0,0,.0001) none repeat scroll 0 0 !important;\n            border: 1px solid rgba(0,0,0,.075) !important;\n        }\n        .span-block{\n            display: block !important;\n            padding:5px;\n        }\n    </style>\n\n</head>\n\n<body>\n<!--zoom elavator area one start-->\n<div class=\"elavator_area\">\n    <div class=\"container\">\n        <jsp:include page=\"header.jsp\"/>\n        <div class=\"shop_menu shop_menu_2 main-detail-div\">\n            <ul class=\"cramb_area cramb_area_5 main-detail-nav\">\n                <li><a href=\"index.html\">首页 /</a></li>\n                <%--<li><a href=\"index.html\">Shop /</a></li>\n                <li><a href=\"index.html\">Headlight/</a></li>\n                <li><a href=\"index.html\">Hats /</a></li>--%>\n                <li class=\"br-active\">${goodsInfo['goods'].goodsname}</li>\n            </ul>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-lg-5 col-md-5 col-sm-12 col-xs-12\">\n                <div class=\"shopdetails\">\n                    <div id=\"leftbox\">\n                        <div id=\"showbox\">\n                            <c:forEach items=\"${goodsInfo['image']}\" var=\"path\">\n                                <img src=\"/pictures/${path.path}\" width=\"400\" height=\"400\"/>\n                            </c:forEach>\n                        </div>\n                        <div id=\"showsum\">\n                        </div>\n                        <p class=\"showpage\">\n                            <a href=\"javascript:void(0);\" id=\"showlast\"> < </a>\n                            <a href=\"javascript:void(0);\" id=\"shownext\"> > </a>\n                        </p>\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-lg-6 col-md-6 col-sm-12 col-xs-12\">\n                <div class=\"elav_titel\">\n                    <div class=\"elv_heading\">\n                        <h3>${goodsInfo['goods'].goodsname}</h3>\n                    </div>\n                    <div class=\"price_rating\">\n                        <%--<a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a class=\"not-rated\" href=\"#\">\n                            <i class=\"fa fa-star-o\"></i>\n                        </a>\n                        <a class=\"review-link\" href=\"#\">\n                            (\n                            <span class=\"count\">2</span>\n                            customer reviews)\n                        </a>--%>\n                    </div>\n                    <!-- <div class=\"evavet_description\">\n                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce posuere metus vitae arcu imperdiet, id aliquet ante scelerisque. Sed sit amet sem vitae urna fringilla tempus.</p>\n                    </div> -->\n                </div>\n                <div class=\"elav_info\">\n                    <!-- 价格 -->\n                    <div class=\"price_box price_box_acr new_meta\">\n                        <%--<span class=\"old- price old- price-2\">$250.00</span>--%>\n                        <span class=\"spical-price spical-price-2\">￥${goodsInfo['goods'].price}</span>\n                    </div>\n                    <div class=\"new_meta\">\n                            <span class=\"sku_wrapper big-font\">\n                                类别:\n                                <span class=\"sku\">${goodsInfo['cate'].catename}</span>\n                            </span>\n                        <span class=\"sku_wrapper big-font\">\n                                数量:\n                                <span class=\"sku\">${goodsInfo['goods'].num}</span>\n                            </span>\n                    </div>\n\n                    <div class=\"new_meta\">\n                            <span class=\"sku_wrapper big-font\">\n                                优惠:\n                                <c:if test=\"${goodsInfo['goods'].activityid != 1}\">\n                                    <span class=\"sku\">${goodsInfo['goods'].activity.activityname}</span>\n                                    <span class=\"span-block\">${goodsInfo['goods'].activity.activitydes}</span>\n                                    <span class=\"span-block\">折扣:${goodsInfo['goods'].activity.discount}</span>\n                                    <c:if test=\"${!empty goodsInfo['goods'].activity.fullprice}\">\n                                        <span class=\"span-block\">\n                                            满${goodsInfo['goods'].activity.fullprice}减${goodsInfo['goods'].activity.reduceprice}\n                                        </span>\n                                    </c:if>\n                                    <c:if test=\"${!empty goodsInfo['goods'].activity.fullnum}\">\n                                        <span class=\"span-block\">\n                                            满${goodsInfo['goods'].activity.fullnum}免${goodsInfo['goods'].activity.reducenum}\n                                        </span>\n                                    </c:if>\n                                </c:if>\n                                <c:if test=\"${goodsInfo['goods'].activityid == 1}\">\n                                    <span class=\"sku\">暂无优惠，敬请期待！</span>\n                                </c:if>\n                            </span>\n                    </div>\n                    <%--<div class=\"new_meta\"></div>--%>\n\n                    <div class=\"rel-div\">\n                        <div class=\"add_defi new_meta\">\n                            <a id=\"chatto\" href=\"${pageContext.request.contextPath}/chat?sendto=5\" data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\" big-font\">\n                                <i class=\"fa fa-commenting\"></i>\n                                联系客服\n                            </a>\n                        </div>\n                        <form class=\"cart-btn-area new_meta\" action=\"${pageContext.request.contextPath}/addCart\" method=\"post\">\n                            <input type=\"hidden\" value=\"${goodsInfo['goods'].goodsid}\" name=\"goodsid\"/>\n                            <input type=\"number\" value=\"1\" name=\"goodsnum\">\n                            <button class=\"add-tocart cart_zpf\" type=\"submit\">加入购物车</button>\n                        </form>\n                        <div class=\"add_defi new_meta\">\n                            <a data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\"fav-button big-font\" data-id=\"${goodsInfo['goods'].goodsid}\">\n                                <c:if test=\"${goodsInfo['goods'].fav}\">\n                                    <i class=\"fa fa-heart\"></i>\n                                    取消收藏\n                                </c:if>\n                                <c:if test=\"${!goodsInfo['goods'].fav}\">\n                                    <i class=\"fa fa-heart-o\"></i>\n                                    <span class=\"like-content\">收藏</span>\n                                </c:if>\n                            </a>\n                        </div>\n                    </div>\n\n                    <!-- <div class=\"add_defi_2\">\n                        <a data-original-title=\"Compare\" title=\"\" data-toggle=\"tooltip\" rel=\"nofollow\" data-product_id=\"45\" href=\"\"><i class=\"fa fa-refresh another_icon\"></i> Compare</a>\n                    </div> -->\n\n                </div>\n            </div>\n            <!-- <div class=\"col-lg-4 col-md-4 col-sm-12 col-xs-12\">\n\n        </div> -->\n        </div>\n    </div>\n</div>\n<!--zoom elavator area one end-->\n<!--tab area start-->\n<div class=\"tab_area_start\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12 col-sm-12 col-xs-12 text-right\">\n                <div class=\"my-tabs\">\n                    <!-- Nav tabs -->\n                    <ul class=\"favtabs favtabs-2 favtabs-nytr\" role=\"tablist\">\n                        <%--<li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\">Discription</a></li>--%>\n                        <li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\"\n                                                                  data-toggle=\"tab\">商品描述</a></li>\n                        <li role=\"presentation\"><a href=\"#profile\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">评价\n                            (${commentList.size()})</a></li>\n                    </ul>\n                    <!-- Tab panes -->\n                    <div class=\"tab-content\">\n                        <div role=\"tabpanel\" class=\"tab-pane active\" id=\"home\">\n                            <div class=\"row\">\n                                <div class=\"col-md-12 col-xs-12\">\n                                    <div class=\"tb_desc\">\n                                        <h2>商品描述</h2>\n                                        <p>${goodsInfo['goods'].description}</p>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div role=\"tabpanel\" class=\"tab-pane\" id=\"profile\">\n                            <div class=\"row\">\n                                <div class=\"col-md-12 col-xs-12\">\n                                    <div class=\"tb_desc\">\n                                        <div class=\"review_area_heading\">\n                                            <div id=\"comnt\">\n                                                <h2>${commentList.size()}条评论</h2>\n                                                <ol class=\"commentlist\">\n                                                    <c:forEach items=\"${commentList}\" var=\"comment\">\n                                                        <li id=\"li-comment-22\" class=\"comment even thread-even depth-1\"\n                                                            itemscope=\"\">\n                                                            <div id=\"comment-22\" class=\"comment_container\">\n                                                                <img class=\"head avatar avatar-60 photo \"width=\"60\" height=\"60\"\n                                                                     src=\"${pageContext.request.contextPath}/image/head.jpg\" alt=\"\">\n                                                                <div class=\"comment-text\">\n                                                                    <div class=\"star-rating\" title=\"Rated ${comment.point} out of 5\"\n                                                                         itemscope=\"\">\n                                                                        <div class=\"price_rating price_rating_2\">\n                                                                          <c:forEach  begin=\"1\" end=\"${comment.point}\">\n                                                                              <a href=\"#\">\n                                                                                  <i class=\"fa fa-star\"></i>\n                                                                              </a>\n                                                                          </c:forEach>\n                                                                            <c:forEach begin=\"${comment.point+1}\" end=\"5\">\n                                                                                <a class=\"not-rated\" href=\"#\">\n                                                                                    <i class=\"fa fa-star-o\"\n                                                                                       aria-hidden=\"true\"></i>\n                                                                                </a>\n                                                                            </c:forEach>\n                                                                            <span>\n                                                                                <strong>${comment.point}</strong>\n                                                                                out of ${5-comment.point}\n                                                                            </span>\n                                                                        </div>\n                                                                    </div>\n                                                                    <p class=\"meta\">\n                                                                        <strong>${comment.username}</strong>\n                                                                        –\n                                                                        <time datetime=\"${comment.commenttime}\">\n                                                                            ${comment.commenttime.year+1900}年\n                                                                            ${comment.commenttime.month+1}月\n                                                                            ${comment.commenttime.date}日\n                                                                        </time>\n                                                                        :\n                                                                        <a  href=\"${pageContext.request.contextPath}/chat?sendto=${comment.userid}\" data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\" big-font\">\n                                                                            <i class=\"fa fa-commenting\"></i>\n                                                                        </a>\n                                                                    </p>\n                                                                    <div class=\"description\">\n                                                                        <p>${comment.content}</p>\n                                                                    </div>\n                                                                </div>\n                                                            </div>\n                                                        </li>\n                                                    </c:forEach>\n                                                </ol>\n                                            </div>\n                                            <%--<div class=\"review_form_area\">\n                                                <div class=\"review_form\">\n                                                    <div class=\"revew_form_content\">\n                                                        <h3 id=\"reply-title\" class=\"comment-reply-title\">\n                                                            Add a review\n                                                            <small>\n                                                                <a id=\"cancel-comment-reply-link\" style=\"display:none;\" href=\"#\" rel=\"nofollow\">Cancel reply</a>\n                                                            </small>\n                                                        </h3>\n                                                        <form id=\"commentform\" class=\"comment-form\" method=\"post\" action=\"form\">\n                                                            <div class=\"comment-form-rating\">\n                                                                <label class=\"comment\">Your Rating</label>\n                                                                <div class=\"price_rating price_rating_2 price_rating_3\">\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                </div>\n                                                            </div>\n                                                            <div class=\"comment-form-comment\">\n                                                                <label class=\"comment\">Your Review</label>\n                                                                <textarea id=\"comment\" aria-required=\"true\" rows=\"8\" cols=\"45\" name=\"comment\"></textarea>\n                                                            </div>\n                                                            <div class=\"comment-form-author\">\n                                                                <label class=\"comment\">\n                                                                    Name\n                                                                    <span class=\"required required_menu\">*</span>\n                                                                </label>\n                                                                <input id=\"author\" class=\"mix_type\" type=\"text\" aria-required=\"true\" size=\"30\" value=\"\" name=\"author\">\n                                                            </div>\n                                                            <div class=\"comment-form-email\">\n                                                                <label class=\"comment\">\n                                                                    Email\n                                                                    <span class=\"required required_menu\">*</span>\n                                                                </label>\n                                                                <input id=\"email\" class=\"mix_type\" type=\"text\" aria-required=\"true\" size=\"30\" value=\"\" name=\"email\">\n                                                            </div>\n                                                            <div class=\"form-submit\">\n                                                                <input id=\"sub\" class=\"submt\" type=\"submit\" value=\"Submit\" name=\"submit\">\n                                                            </div>\n                                                        </form>\n                                                    </div>\n                                                </div>\n                                            </div>--%>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!--tab area end-->\n<!-- jquery latest version -->\n<!-- <script src=\"js/vendor/jquery-1.12.0.min.js\"></script> -->\n<!-- bootstrap js -->\n<!-- <script src=\"js/bootstrap.min.js\"></script> -->\n\n</body>\n</html>\n\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/favorite.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!doctype html>\n\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息-收藏</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/information.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n        .content{\n            margin: 23px 1px;\n        }\n        .page-info {\n            padding: 30px 30px 30px 50px;\n        }\n        .like-button{\n            left: 75% !important;\n            top: 65% !important;\n        }\n    </style>\n    <script>\n        $(document).ready(function () {\n            $(\".data-item-li\").hover(function(){\n                //需处理显示哪个按钮\n                // $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n                $(this).find(\".like-button\").show();\n            },function(){\n                $(this).find(\".like-button\").hide();\n            });\n            $(\".like-button\").click(function () {\n                var goodsId = $(this).attr(\"data-id\");\n                //取消收藏\n                $.ajax({\n                    url:\"/deleteCollect\",\n                    type:\"POST\",\n                    data:{\n                        goodsid:goodsId\n                    },\n                    success:function (result) {\n                        //取消收藏成功\n                        if(result.code === 100){\n                            location.reload();\n                        }\n                    },\n                    error:function () {\n                        alert(\"取消收藏失败\");\n                    }\n                });\n            });\n        });\n    </script>\n</head>\n<body>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">我的收藏</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <div class=\"mdl-layout-spacer\"></div>\n\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n        <div class=\"mdl-grid demo-content\">\n            <div class=\"content\">\n                <div class=\"module\">\n                    <div class=\"bd\">\n                        <div class=\"data\">\n                            <ul>\n                                <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                                    <li class=\"data-item-li\">\n                                        <div class=\"to-big\">\n                                            <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"/pictures/${goods.imagePaths[0].path}\" width=\"240px\" height=\"240px\" alt=\"\"/>\n                                            </a>\n                                        </div>\n                                        <p class=\"text-right\">\n                                            <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                        </p>\n                                        <div class=\"text-right\">\n                                            <b>￥${goods.price}</b>\n                                        </div>\n                                        <div>\n                                            <c:if test=\"${goods.fav}\">\n                                                <button\n                                                        class=\"like-button glyphicon glyphicon-trash btn btn-default\"\n                                                        data-id=\"${goods.goodsid}\"\n                                                        style=\"display: none;\"></button>\n                                            </c:if>\n\n                                            <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                        </div>\n                                    </li>\n                                </c:forEach>\n\n                                <div class=\"clear-float\" style=\"clear: both;\"></div>\n                            </ul>\n                        </div>\n                        <div class=\"row page-div\">\n                            <div class=\"col-md-5 page-info\">\n                                当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                            </div>\n                            <div class=\"col-md-6\">\n                                <nav aria-label=\"Page navigation\">\n                                    <ul class=\"pagination pagination-lg\">\n\n                                        <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                            <li>\n                                                <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                                    <span aria-hidden=\"true\">&laquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                            <li class=\"disabled\">\n                                                <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                                    <span aria-hidden=\"true\">&laquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                            <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                                <li class=\"active\"><a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageNums}\">${pageNums}</a></li>\n                                            </c:if>\n                                            <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                                <li><a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageNums}\">${pageNums}</a></li>\n                                            </c:if>\n                                        </c:forEach>\n\n                                        <c:if test=\"${pageInfo.hasNextPage}\">\n                                            <li>\n                                                <a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                                    <span aria-hidden=\"true\">&raquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:if test=\"${!pageInfo.hasNextPage}\">\n                                            <li class=\"disabled\">\n                                                <a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                                    <span aria-hidden=\"true\">&raquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                    </ul>\n                                </nav>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </main>\n</div>\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/frontChat.jsp",
    "content": "\n<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\n         pageEncoding=\"UTF-8\"%>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <title>Insert title here</title>\n    <script type=\"text/javascript\" src=\"<%=request.getContextPath()%>/js/jquery.js\"></script>\n    <script type=\"text/javascript\" src=\"<%=request.getContextPath()%>/js/mqttws31.js\"></script>\n    <script type=\"text/javascript\">\n        var client;\n        var clientID;\n        $(window).on('beforeunload',function(){\n            client=null;\n            window.opener.document.getElementById(\"flag\").value=\"0\";\n        });\n        $(function($) {\n            //$('#con').bind('click',function(){\n            clientID=$('#clientID').val();\n            client = new Messaging.Client('127.0.0.1',61614,clientID);\n            client.onConnectionLost = function(){\n                $('#message').append('连接已断开');\n            };\n            //收到消息\n            client.onMessageArrived = function(message){\n                var msgObj=jQuery.parseJSON(message.payloadString);\n                $('#toID').val(msgObj.from);\n                debugger\n                if (msgObj.to===clientID){\n                    debugger;\n                    $('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");\n                }\n            };\n            //建立连接和订阅\n            client.connect({onSuccess:function(){\n                $('#message').append('连接成功,可以聊天了！'+\"</br>\");\n                //订阅topic\n                client.subscribe(\"topic\");\n\n            }});\n            //});\n            $('#sendBtn').bind('click',function(){\n                clientID=$('#clientID').val();\n                var msg={};\n                msg.from=clientID;\n                msg.to=$('#toID').val();\n                msg.body=$('#sendMsg').val();\n                message = new Messaging.Message(JSON.stringify(msg));\n                message.destinationName = \"topic\";\n                client.send(message);\n                $('#message').append(msg.from+\":\"+msg.body+\"</br>\");\n            });\n\n        });\n    </script>\n</head>\n<body>\n<%String clientID=request.getParameter(\"clientID\");\n    String toID=request.getParameter(\"toID\");\n%>\n<div id=\"message\"></div><br>\n<input type=\"hidden\" id=\"clientID\" value=\"<%=clientID%>\">\n<input type=\"hidden\" id=\"toID\" value=\"<%=toID%>\">\n<textarea id=\"sendMsg\" rows=\"3\" cols=\"50\">请输入信息</textarea>\n<button id='sendBtn'>发送</button>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/goodsNav.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-top-nav-container\">\n    <div class=\"row\">\n        <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n            <ul class=\"text-uppercase\">\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/show\">所有商品</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/add\">添加商品</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>\n                <%--<li><a href=\"login.html\">。。。</a></li>--%>\n            </ul>\n        </nav>\n    </div>\n</div>\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/header.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\">\n<div class=\"row\">\n    <div class=\"col-md-4\" role=\"navigation\">\n\n        <ul class=\"nav nav-pills\">\n            <c:if test=\"${empty sessionScope.user}\">\n                <li><a href=\"${pageContext.request.contextPath}/login\" style=\"color: #F22E00\">请登录</a></li>\n            </c:if>\n            <c:if test=\"${!empty sessionScope.user}\">\n                <li class=\"info-a\">\n                    <a href=\"${pageContext.request.contextPath}/information\" style=\"color: #F22E00\">\n                        ${sessionScope.user.username}\n                    <span class=\"glyphicon glyphicon-triangle-bottom\" style=\"font-size: 5px;margin-left: 7px;\" aria-hidden=\"true\">\n                    </span>\n                    </a>\n                    <ul class=\"dropdown-menu\">\n                        <li><a href=\"${pageContext.request.contextPath}/information\">账户管理</a></li>\n                        <li role=\"separator\" class=\"divider\"></li>\n                        <li><a href=\"${pageContext.request.contextPath}/logout\" class=\"login-out\">退出登录</a></li>\n                    </ul>\n                </li>\n            </c:if>\n\n            <li><a href=\"${pageContext.request.contextPath}/register\">注册</a></li>\n        </ul>\n    </div>\n    <div class=\"col-md-8\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li><a href=\"${pageContext.request.contextPath}/chat\"> <i\n                    class=\"fa fa-comment\"></i> 消息\n            </a></li>\n            <li><a href=\"${pageContext.request.contextPath}/showcart\"> <i\n                    class=\"fa fa-shopping-cart\" style=\"color: #F22E00\"></i>\n                购物车\n            </a></li>\n            <li><a href=\"${pageContext.request.contextPath}/info/favorite\"> <i\n                    class=\"fa fa-star\"></i> 收藏夹\n            </a></li>\n        </ul>\n    </div>\n</div>\n<div id=\"header-nav\">\n    <nav class=\"navbar navbar-default\" id=\"header-nav-middle\">\n        <div class=\"container-fluid\">\n            <!-- Brand and toggle get grouped for better mobile display -->\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle collapsed\"\n                        data-toggle=\"collapse\"\n                        data-target=\"#bs-example-navbar-collapse-1\"\n                        aria-expanded=\"false\">\n                    <span class=\"sr-only\">Toggle navigation</span> <span\n                        class=\"icon-bar\"></span> <span class=\"icon-bar\"></span> <span\n                        class=\"icon-bar\"></span>\n                </button>\n                <a class=\"navbar-brand\" href=\"${pageContext.request.contextPath}/main\"><!-- <img alt=\"Brand\" style=\"display: inline-block;\" src=\"./image/tao.jpg\" width=\"20\" height=\"20\"> --><span class=\"logo-word\">长理商城</span></a>\n            </div>\n\n            <!-- Collect the nav links, forms, and other content for toggling -->\n            <div class=\"collapse navbar-collapse\"\n                 id=\"bs-example-navbar-collapse-1\">\n                <ul class=\"nav navbar-nav\">\n                    <li><a class=\"a-color\" href=\"${pageContext.request.contextPath}/main\">首页</a></li>\n                    <li><a class=\"a-color\" href=\"${pageContext.request.contextPath}/information\">个人信息</a></li>\n                    <li class=\"dropdown\"><a class=\"a-color\" href=\"${pageContext.request.contextPath}/info/list\"\n                                            class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\"\n                                            aria-haspopup=\"true\" aria-expanded=\"false\">我的订单 <span\n                            class=\"caret\"></span></a>\n                        <ul class=\"dropdown-menu\">\n                            <li><a href=\"${pageContext.request.contextPath}/info/address\">地址管理</a></li>\n                            <li><a href=\"${pageContext.request.contextPath}/order\">交易中</a></li>\n                            <li role=\"separator\" class=\"divider\"></li>\n                            <li><a href=\"${pageContext.request.contextPath}/chatrobot\">小淘</a></li>\n                        </ul></li>\n                </ul>\n\n                <form class=\"navbar-form navbar-right\" role=\"search\" method=\"get\" action=\"${pageContext.request.contextPath}/search\">\n                    <div class=\"form-group\">\n                        <input type=\"text\" class=\"form-control\" placeholder=\"Search\" name=\"keyword\">\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-default\">\n                        <span class=\"glyphicon glyphicon-search\" aria-label=\"搜索\"></span>\n                    </button>\n                </form>\n            </div>\n            <!-- /.navbar-collapse -->\n        </div>\n        <!-- /.container-fluid -->\n    </nav>\n</div>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/information.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!doctype html>\n<!--\nMaterial Design Lite\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License\n-->\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/information.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-info\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改个人信息</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">昵称</label>\n                        <div class=\"col-sm-9\">\n                            <div  name=\"name\" id=\"name\"></div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"email\" class=\"col-sm-2 control-label\">邮箱</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"email\" id=\"email\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"telephone\" name=\"telephone\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveInfo\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-Psw\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelPsw\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelPsw\">修改密码</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"updatePsw-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"oldPsw\" class=\"col-sm-2 control-label\">旧密码</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"password\" class=\"form-control\" name=\"oldPsw\" id=\"oldPsw\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\" style=\"display: none\" id=\"oldPswError\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\"></label>\n                        <div class=\"col-sm-9\">\n                            <label style=\"color: #BD1F3B\">密码错误</label>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"newPsw\" class=\"col-sm-2 control-label\">新密码</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"password\" class=\"form-control\" name=\"newPsw\" id=\"newPsw\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\" style=\"display: none\" id=\"newPswError\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\"></label>\n                        <div class=\"col-sm-9\">\n                            <label style=\"color: #BD1F3B\">密码应长度大于8</label>\n                        </div>\n                    </div>\n\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"savePsw\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">个人信息</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n               <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                    <i class=\"material-icons\">search</i>\n                </label>\n                <div class=\"mdl-textfield__expandable-holder\">\n                    <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                    <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                </div>--%>\n            </div>\n           <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                <i class=\"material-icons\">more_vert</i>\n            </button>\n            <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                <li class=\"mdl-menu__item\">About</li>\n                <li class=\"mdl-menu__item\">Contact</li>\n                <li class=\"mdl-menu__item\">Legal information</li>\n            </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n           <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n               <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\">\n                </div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n        <div class=\"mdl-grid demo-content\">\n            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                <div class=\"tab-content\">\n                        <table class=\"table\" cellpadding=\"6\" cellspacing=\"1\">\n                            <thead>\n                            <th style=\"border: 0px solid transparent\">\n                                <%--<h1>个人信息</h1>--%>\n                            </th>\n                            </thead>\n                            <tbody >\n                            <tr >\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">用户号</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"userIdVal\">${user.getUserid()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">用户名</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"nameVal\">${user.getUsername()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">注册时间</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"regTimeVal\">\n                                    ${user.regtime.year+1900} 年\n                                    ${user.regtime.month+1} 月\n                                    ${user.regtime.date} 日\n                                </td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">邮箱</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"emailVal\">${user.getEmail()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">手机号</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"telephoneVal\">${user.getTelephone()}</td>\n                            </tr>\n                            <i Psw=\"${user.getPassword()}\" id=\"Psw\"></i>\n                            </tbody>\n                        </table>\n                    </div>\n                <div class=\"mdl-card__actions mdl-card--border\">\n                    <button class=\"templatemo-blue-button\" id=\"changeInfo\"><h5>修改信息</h5></button>\n                    <button class=\"templatemo-blue-button\" id=\"changePsw\"><h5>修改密码</h5></button>\n                </div>\n            </div>\n        </div>\n    </main>\n</div>\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/list.jsp",
    "content": "<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/26\n  Time: 10:16\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息-我的订单</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/list.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <script src=\"${pageContext.request.contextPath}/js/distpicker.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.raty.js\"></script>\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n\n        .no-border{border: 0px solid transparent !important;}\n\n        .bs-example {\n            position: relative;\n            padding: 45px 15px 15px;\n            margin: 0 -15px 15px;\n            border-color: #e5e5e5 #eee #eee;\n            border-style: solid;\n            border-width: 1px 0;\n            -webkit-box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n            box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n        }\n\n        .finish-btn{\n            background-color:#e65b0e !important;\n        }\n\n        .font-color{\n            color: #00BBD6; !important;\n        }\n\n\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"evaluate\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelPsw\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelPsw\">商品评价</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"updatePsw-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"star\" class=\"col-sm-2 control-label\">商品评分</label>\n                        <div class=\"col-sm-9\">\n                            <div id=\"star\" data-num=\"3.5\"></div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"description\" class=\"col-sm-2 control-label\">详细描述</label>\n                        <div class=\"col-sm-9\">\n                            <textarea class=\"form-control\" rows=\"3\" id=\"description\"></textarea>\n                        </div>\n                    </div>\n\n\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveEvaluate\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">订单管理</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\"></div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n            <div class=\"mdl-grid demo-content\" id=\"parent\">\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>未发货</h3><%--未收到货--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${!order.issend}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                            <div class=\"tab-content col-lg-12\">\n                                <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                    <tbody>\n                                    <td class=\"no-border col-lg-9\" >\n                                        订单号：<i name=\"orderid\">${order.orderid}</i>\n                                        &nbsp;\n                                        &nbsp;\n                                        订单日期:\n                                            ${order.ordertime.year+1900} 年\n                                            ${order.ordertime.month+1} 月\n                                            ${order.ordertime.date} 日\n                                        &nbsp;\n                                        收货地址:\n                                            ${order.address.province}\n                                            ${order.address.city}\n                                            ${order.address.county}\n                                    </td>\n                                    <%--<td class=\"no-border col-lg-7\">\n                                        订单日期:\n                                            ${order.ordertime.year+1900} 年\n                                            ${order.ordertime.month+1} 月\n                                            ${order.ordertime.date} 日\n                                        &nbsp;\n                                        收货地址:\n                                            ${order.address.province}\n                                            ${order.address.city}\n                                            ${order.address.county}\n                                    </td>--%>\n                                    <td  class=\"no-border col-lg-3\">\n                                        原价:${order.oldprice}  现价:${order.newprice}\n                                    </td>\n                                    </tbody>\n                                </table>\n                                <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                    <tbody>\n                                    <tr>\n                                        <td class=\"col-lg-1\">\n                                            商品号\n                                        </td>\n                                        <td class=\"col-lg-2\">\n                                            商品名称\n                                        </td>\n                                        <td class=\"col-lg-1\">\n                                            价格\n                                        </td>\n                                        <td class=\"col-lg-1\">\n                                            数量\n                                        </td>\n                                        <td class=\"col-lg-2\">\n                                            商品分类\n                                        </td>\n                                    </tr>\n                                    </tbody>\n                                </table>\n                            <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                            </c:forEach>\n                            </div>\n                            <div class=\"mdl-card__actions mdl-card--border\">\n                            </div>\n                        </div>\n                        </c:if>\n                    </c:forEach>\n\n                </div>\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>未收货</h3><%--未完成--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${order.issend&&!order.isreceive}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                                <div class=\"tab-content col-lg-12\">\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"no-border col-lg-9\" >\n                                                订单号：<i name=\"orderid\">${order.orderid}</i>\n                                                &nbsp;\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>\n                                            <%--<td class=\"no-border col-lg-7\">\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                &nbsp;\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>--%>\n                                            <td  class=\"no-border col-lg-3\">\n                                                原价:${order.oldprice}  现价:${order.newprice}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                商品号\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品名称\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                价格\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                数量\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品分类\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    </c:forEach>\n                                </div>\n                                <div class=\"mdl-card__actions mdl-card--border\">\n                                    <button class=\"templatemo-blue-button \" name=\"finishList\"><h5>完成订单</h5></button>\n                                </div>\n                            </div>\n                        </c:if>\n                    </c:forEach>\n\n                </div>\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>已完成</h3><%--已完成--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${order.iscomplete}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                                <div class=\"tab-content col-lg-12\">\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"no-border col-lg-9\" >\n                                                订单号：<i name=\"orderid\">${order.orderid}</i>\n                                                &nbsp;\n                                                &nbsp;\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>\n                                           <%-- <td class=\"no-border col-lg-7\">\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                &nbsp;\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>--%>\n                                            <td  class=\"no-border col-lg-3\">\n                                               原价:${order.oldprice}  现价:${order.newprice}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                商品号\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品名称\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                价格\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                数量\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品分类\n                                            </td>\n                                            <td class=\"col-lg-1\">\n\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect font-color\" name=\"evaluate\" ><h5>评价</h5></button>\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    </c:forEach>\n                                </div>\n                                <div class=\"mdl-card__actions mdl-card--border\">\n                                    <button class=\"templatemo-blue-button finish-btn\" name=\"deleteList\"><h5>删除订单</h5></button>\n                                </div>\n                            </div>\n                        </c:if>\n                    </c:forEach>\n                </div>\n            </div>\n    </main>\n</div>\n\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/login.jsp",
    "content": "<%@page import=\"java.security.interfaces.RSAKey\"%>\n<%@ page language=\"java\" pageEncoding=\"UTF-8\"%>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<title>长理商城-欢迎登录</title>\n<script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/login.css\">\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n<script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/jquery.validate.min.js\"></script>\n\t<script src=\"${pageContext.request.contextPath}/js/login.js\"></script>\n</head>\n<%--<script>\n\n\t$(document).ready(function() {\n\n\t\t\n\t\t$(document).keypress(function(e) {\n\t\t\tif (e.which == 13) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\t$(\".login-input\").click();\n\t\t\t\t//form.submit();\n\t\t\t}\n\t\t});\n\t\tinput_value();\n\t})\n\t\n\tfunction input_value() {\n\t\tif (UserID != \"null\") {\n\t\t\tdocument.getElementById(\"inputEmail3\").value = UserID;\n\t\t}\n\t}\n</script>--%>\n\n<script type=\"text/javascript\">\n\tfunction reloadcode() {\n\t\tvar verify = document.getElementById('code');\n\t\tverify.setAttribute(\"src\", \"${pageContext.request.contextPath}/verificationcodeimg?it=\" + Math.random());\n\t}\n</script>\n\n\n<body onload=\"input_value()\">\n\t<div id=\"main\" class=\"container\">\n\t\t<div id=\"header\">\n\t\t\t<%@ include file=\"header.jsp\"%>\n\t\t</div>\n\t\t<div class=\"login\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"col-md-6\">\n\t\t\t\t\t<img src=\"./image/login.png\" alt=\"\" width=\"640\" height=\"400\" style=\"margin-left:-40px;margin-top:30px;\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-md-5 form-login\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<!-- <h2 class=\"login-h2\">登录</h2> -->\n\t\t\t\t\t\t<form class=\"form-horizontal\" id=\"form2\" action=\"${pageContext.request.contextPath}/loginconfirm\" method=\"post\">\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"username\" class=\"col-sm-2 control-label\">用户名</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"username\"\n\t\t\t\t\t\t\t\t\t\tname=\"username\" placeholder=\"用户名\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"password\" class=\"col-sm-2 control-label\">密码</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" id=\"password\"\n\t\t\t\t\t\t\t\t\t\tname=\"password\" placeholder=\"密码\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"confirmlogo\" class=\"col-sm-2 control-label\">验证码</label>\n\t\t\t\t\t\t\t\t<img src=\"${pageContext.request.contextPath}/verificationcodeimg\" id=\"code\" onclick=\"reloadcode()\"\n\t\t\t\t\t\t\t\t\tstyle=\"cursor: pointer;\" alt=\"看不清楚,换一张\" width=\"100px\">\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\" style=\"width: 160px\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"confirmlogo\"\n\t\t\t\t\t\t\t\t\t\tname=\"confirmlogo\" placeholder=\"验证码\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div style=\"margin-left:80px;color:red;\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<div class=\"col-sm-offset-2 col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"submit\" class=\"btn btn-primary login-input\" value=\"登录\"\n\t\t\t\t\t\t\t\t\t\tname=\"submit\">\n\t\t\t\t\t\t\t\t\t<a href=\"\" style=\"margin-left:10px;\">忘记密码?</a>\n\t\t\t\t\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t\t\t\t\t${errorMsg}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/main.jsp",
    "content": "<%@ page language=\"java\" pageEncoding=\"UTF-8\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n\n    <script>\n\n    </script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n\n    <div id=\"header\">\n        <%@ include file=\"header.jsp\" %>\n\n        <!-- 旋转图 -->\n        <div class=\"header-bottom\">\n            <div class=\"sort\">\n                <div class=\"sort-channel\">\n                    <ul class=\"sort-channel-list list-group\">\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=数码\">数码</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手机\">手机</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手机壳\">手机壳</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\">充电器</a> <a href=\"\">电池</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=耳机\">耳机</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=相机\">相机</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=镜头\">镜头</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=单反\">单反</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=胶片\">胶片</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=摄像\">摄像</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=电脑\">电脑</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=显示屏\">显示屏</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=显卡\">显卡</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=硬盘\">硬盘</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=内存条\">内存条</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=影音\">影音</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=MP3\">MP3</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=音响\">音响</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=麦克风\">麦克风</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=收音机\">收音机</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=日用\">日用</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=护肤\">护肤</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=洗发水\">洗发水</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=沐浴露\">沐浴露</a> <a href=\"\">洗面奶</a> <a\n                                            href=\"\">洗手液</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=美妆\">美妆</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=面膜\">面膜</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=口红\">口红</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=防嗮\">防嗮</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=香水\">香水</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=家居\">家居</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=书架\">书架</a><a href=\"${pageContext.request.contextPath}/category?cate=鞋柜\">鞋柜</a>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=衣架\">衣架</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=台灯\">台灯</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=闲置书籍\">书籍</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=英语\">英语</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=四六级\">四六级</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\">商务英语</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=听力\">听力</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=计算机\">计算机</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=自动化\">自动化</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=金融\">金融</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=其他\">其他</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=体育\">体育</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=足球\">足球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=乒乓球\">乒乓球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=篮球\">篮球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=羽毛球\">羽毛球</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=经典\">经典</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=历史\">历史</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=名人\">名人</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=政治\">政治</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=小说\">小说</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=服饰\">服饰</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=女装\">女装</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=连衣裙\">连衣裙</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\"> 半身裙</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate= T恤\"> T恤 衬衫</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=卫衣\">卫衣</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=男装\">男装</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=外套\">外套</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=衬衫\">衬衫</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=夹克\">夹克</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=运动外套\">运动外套</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=鞋子\">鞋子</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=运动鞋\">运动鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=单鞋\">单鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=皮鞋\">皮鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=拖鞋\">拖鞋</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=箱包\">箱包</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=女包\">女包</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=男包\">男包</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=旅行箱\">旅行箱</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=装饰品\">装饰品</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=配饰\">配饰</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=腰带\">腰带</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=皮带\">皮带</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=帽子\">帽子</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=围巾\">围巾</a>\n                                        <a\n                                                href=\"${pageContext.request.contextPath}/category?cate=手套\">手套</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手表\">手表</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=机械表\">机械表</a><a\n                                            href=\"${pageContext.request.contextPath}/category?cate=石英表\">石英表</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电子表\">电子表</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=饰品\">饰品</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=眼镜\">眼镜</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=手链\">手链</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=项链\">项链</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=吊坠\">吊坠</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=收藏品\">收藏品</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=古玩\">古玩</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=邮票\">邮票</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=钱币\">钱币</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=陶瓷\">陶瓷</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=学习用品\">学习用品</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=编码\">编码</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=Java\">Java</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=PHP\">PHP</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=C\">C++</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=Python\">Python</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=培训\">培训</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=驾照\">驾照</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=计算机证书\">计算机证书</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=四六级\">四六级</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=线上课程\">线上课程</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=健身\">健身</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考证\">考证</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=学习\">学习</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=闲置百货\">百货</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=日用\">日用</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=雨伞\">雨伞</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=口罩\">口罩</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=拖布\">拖布</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电风扇\">电风扇</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=餐具\">餐具</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=餐盘\">餐盘</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=保温杯\">保温杯</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=饭盒\">饭盒</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=餐具套装\">餐具套装</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=出行\">出行</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=自行车\">自行车</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电动车\">电动车</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=滑板\">滑板</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                    </ul>\n                </div>\n                <!-- <div class=\"sort-detail\">\n                    <dl class=\"dl-horizontal\">\n                        <dt>手机</dt>\n                        <dd>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=手机壳\">手机壳</a>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=充电器\">充电器</a>\n                            <a href=\"\">电池</a>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=耳机\">耳机</a>\n                        </dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>相机</dt>\n                        <dd>\n                            <a href=\"\">镜头</a>\n                            <a href=\"\">单反</a>\n                            <a href=\"\">胶片</a>\n                            <a href=\"\">摄像</a>\n                        </dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>电脑</dt>\n                        <dd></dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>MP3</dt>\n                        <dd></dd>\n                    </dl>\n                </div> -->\n            </div>\n            <div id=\"mycarousel\" class=\"carousel slide\" data-ride=\"carousel\">\n                <div class=\"carousel-inner\">\n                    <div class=\"item active\">\n                        <img src=\"${pageContext.request.contextPath}/image/4.jpg\" alt=\"\">\n                    </div>\n\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/3.jpg\" alt=\"\">\n                    </div>\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/5.jpg\" alt=\"\">\n                    </div>\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/6.jpg\" alt=\"\">\n                    </div>\n                </div>\n\n                <ol class=\"carousel-indicators\">\n                    <li data-target=\"#mycarousel\" data-slide-to=\"0\" class=\"active\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"1\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"2\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"3\"></li>\n                </ol>\n\n                <a class=\"left carousel-control\" href=\"#mycarousel\" role=\"button\"\n                   data-slide=\"prev\" style=\"display: none;\"> <span\n                        class=\"glyphicon glyphicon-chevron-left\" aria-hidden=\"true\"></span>\n                    <span class=\"sr-only\">Previous</span>\n                </a> <a class=\"right carousel-control\" href=\"#mycarousel\" role=\"button\"\n                        data-slide=\"next\" style=\"display: none;\"> <span\n                    class=\"glyphicon glyphicon-chevron-right\" aria-hidden=\"true\"></span>\n                <span class=\"sr-only\">Next</span>\n            </a>\n            </div>\n            <div class=\"clear-float\"></div>\n        </div>\n    </div>\n    <div class=\"content\">\n\n        <c:if test=\"${!empty digGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>数码</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${digGoods}\" var=\"goods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"><img src=\"/pictures/${goods.imagePaths[0].path}\" alt=\"\"\n                                                        width=\"200\" height=\"200\"/>\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${goods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${goods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${goods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!goods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${goods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty houseGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>家电</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${houseGoods}\" var=\"housegoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${housegoods.goodsid}\"> <img\n                                                src=\"/pictures/${housegoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${housegoods.goodsid}\">${housegoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${housegoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${housegoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${housegoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!housegoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${housegoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty colGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>服饰</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${colGoods}\" var=\"colgoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${colgoods.goodsid}\"> <img\n                                                src=\"/pictures/${colgoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${colgoods.goodsid}\">${colgoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${colgoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${colgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${colgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!colgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${colgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty bookGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>书籍</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${bookGoods}\" var=\"bookgoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${bookgoods.goodsid}\"> <img\n                                                src=\"/pictures/${bookgoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${bookgoods.goodsid}\">${bookgoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${bookgoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${bookgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${bookgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!bookgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${bookgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n    </div>\n</div>\n</body>\n</html>\n\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/orderConfirm.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/25\n  Time: 10:22\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/shopcart.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/order.css\">\n    <script src=\"${pageContext.request.contextPath}/js/order.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <jsp:include page=\"header.jsp\"/>\n</div>\n<div class=\"shopping_cart\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"account_heading account_heading_ah\">\n                    <h1 class=\"header-border\">确认订单</h1>\n                </div>\n            </div>\n        </div>\n\n        <%--确认收货地址--%>\n        <h4 class=\"header-border h4-mar\">确认收货地址<a href=\"${pageContext.request.contextPath}/info/address\" class=\"pull-right manage-a\">管理收货地址</a></h4>\n\n        <%--<form action=\"\" method=\"post\">--%>\n        <div class=\"address\">\n            <c:forEach items=\"${address}\" var=\"addItem\">\n                <div class=\"radio\">\n                    <label>\n                        <input type=\"radio\" name=\"addressid\" class=\"address-check\" value=\"${addItem.addressid}\"\n                               checked>\n                            ${addItem.province} ${addItem.city} ${addItem.county}  ${addItem.detailaddr}（${addItem.conname}收）${addItem.contel}\n                    </label>\n                </div>\n            </c:forEach>\n        </div>\n\n        <%--商品信息--%>\n        <h4 class=\"header-border h4-mar-2\">确认收货信息</h4>\n        <div class=\"row\">\n            <div class=\"all_wis_frm\">\n                <div class=\"col-md-12\">\n                    <div class=\"wishlist-content wishlist-content-2\">\n\n                        <div class=\"wishlist-table wishlist-table-2 table-responsive\">\n                            <table id=\"cart-table\">\n                                <thead>\n                                <tr>\n                                    <th class=\"product-thumbnail product-thumbnail-2\"></th>\n                                    <th class=\"product-name product-name_2\"><span\n                                            class=\"nobr\">商品</span></th>\n                                    <th class=\"product-price\"><span class=\"nobr\"> 价格\n\t\t\t\t\t\t\t\t\t\t\t\t</span></th>\n                                    <th class=\"product-stock-stauts\"><span class=\"nobr\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t数量 </span></th>\n                                    <th class=\"product-add-to-cart\"><span class=\"nobr\">总价</span></th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                <%--<c:set var=\"oldTotalPrice\" value=\"0\"/>--%>\n                                <c:forEach items=\"${goodsAndImage}\" var=\"goods\">\n                                    <tr>\n                                        <td class=\"product-thumbnail product-thumbnail-2\"><a\n                                                href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"><img\n                                                src=\"/pictures/${goods.imagePaths[0].path}\"\n                                                alt=\"\"/></a></td>\n                                        <td class=\"product-name product-name_2\"><a\n                                                href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                        </td>\n                                        <td class=\"product-price\"><span\n                                                class=\"amount-list amount-list-2\">￥${goods.price}</span></td>\n                                        <td class=\"product-stock-status\">\n                                            <div class=\"latest_es_from_2\">\n                                                <span>${goods.num}</span>\n                                            </div>\n                                        </td>\n                                        <td class=\"product-price\"><span\n                                                class=\"amount-list amount-list-2\">￥${goods.newPrice}</span></td>\n                                        <%--<c:set value=\"${oldTotalPrice+goods.price*goods.num*goods.activity.discount}\" var=\"oldTotalPrice\"/>--%>\n                                    </tr>\n                                </c:forEach>\n\n                                </tbody>\n                                <%--<tfoot>\n                                <tr>\n                                    <td colspan=\"6\">\n                                        <div class=\"coupon\">\n                                            <!-- <label for=\"coupon_code\"></label>\n                                                <input id=\"coupon_code\" class=\"input-text\" type=\"text\" placeholder=\"Coupon code\" value=\"\" name=\"coupon_code\"> -->\n                                            <a\n                                                    class=\"button_act button_act_3 button_act_333 button_act_tp \"\n                                                    href=\"./shopcart.jsp\">更新购物车</a>\n                                            <!-- <a class=\"button_act btn-tip \" href=\"#\">Update cart</a> -->\n                                        </div>\n                                    </td>\n                                </tr>\n                                </tfoot>--%>\n                            </table>\n                        </div>\n                        <div class=\"row\">\n                            <div class=\"col-md-5 col-xs-12 form-group form-group-lg\">\n                                <label class=\"col-sm-2 control-label\" for=\"pay-select\">选择支付方式</label>\n                                <div class=\"col-sm-10\">\n                                    <select class=\"form-control\" id=\"pay-select\">\n                                        <option value=\"1\">在线支付</option>\n                                        <option value=\"0\">货到付款</option>\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"col-md-6 col-md-offset-1 col-xs-12\">\n                                <div class=\"cart_totals\">\n                                    <h2>总价</h2>\n                                    <table class=\"shop_table shop_table_responsive\">\n                                        <tbody>\n                                        <tr class=\"cart-subtotal\">\n                                            <th>总额</th>\n                                            <td data-title=\"Subtotal\"><span\n                                                    class=\"woocommerce-Price-amount amount\">￥<span\n                                                    class=\"woocommerce-Price-currencySymbol\"\n                                                    id=\"total-old\">${oldTotalPrice}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span></td>\n                                        </tr>\n                                        <tr class=\"order-total\">\n                                            <th>实付款</th>\n                                            <td data-title=\"Total\"><strong> <span\n                                                    class=\"woocommerce-Price-amount amount\">￥<span\n                                                    class=\"woocommerce-Price-currencySymbol\"\n                                                    id=\"total-new\">${totalPrice}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n                                            </strong></td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <div class=\"wc-proceed-to-checkout\">\n                                        <%--<input type=\"submit\" class=\"button_act button_act-tc confirm-orders\" value=\"结算\"/>--%>\n                                        <button id=\"confirm-orders\"\n                                                class=\"button_act button_act-tc confirm-orders pull-right\">结算\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <%--</form>--%>\n\n    </div>\n</div>\n<div id=\"path\" hidden>${pageContext.request.contextPath}</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/register.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/23\n  Time: 20:50\n  To change this template use File | Settings | File Templates.\n--%>\n<%@page import=\"java.security.interfaces.RSAKey\"%>\n<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<%request.setCharacterEncoding(\"utf-8\");%>\n<%@ page import=\"java.sql.*\"%>\n<%@ page import=\"java.text.*\"%>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-个人注册</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/login.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.validate.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/validate.js\"></script>\n</head>\n\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <%@ include file=\"header.jsp\"%>\n    </div>\n    <div class=\"login\">\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <img src=\"${pageContext.request.contextPath}/image/register.png\" width=\"450\" height=\"600\" alt=\"\" style=\"margin-left: 40px;\">\n            </div>\n            <div class=\"col-md-5 form-register\">\n                <div>\n                    <!-- <h2 class=\"login-h2\">登录</h2> -->\n                    <form class=\"form-horizontal\" id=\"form\" action=\"${pageContext.request.contextPath}/registerresult\"\n                          method=\"post\">\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputName\" class=\"col-sm-2 control-label\">昵称</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"username\"\n                                       name=\"username\" placeholder=\"昵称\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputPassword\" class=\"col-sm-2 control-label\">密码</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"password\" class=\"form-control\" id=\"password\"\n                                       name=\"password\" placeholder=\"密码\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"confirmPassword\" class=\"col-sm-2 control-label\">确认密码</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"password\" class=\"form-control\"\n                                       id=\"confirmPassword\" name=\"confirmPassword\" placeholder=\"确认密码\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputTel\" class=\"col-sm-2 control-label\">联系方式</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"email\"\n                                       name=\"email\" placeholder=\"邮箱\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputTel\" class=\"col-sm-2 control-label\">联系方式</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"telephone\"\n                                       name=\"telephone\" placeholder=\"联系方式\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-10\">\n                                <input type=\"hidden\" name=\"flag\" id=\"flag\" value=\"1\"> <input\n                                    type=\"submit\" class=\"btn btn-primary form-control\" value=\"注册\">\n                                <div class=\"error\">\n                                    ${errorMsg}\n                                </div>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/search.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/25\n  Time: 22:54\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-搜索${keyword}</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <style>\n        .like-button {\n            left: 80% !important;\n            top: 70% !important;\n        }\n        .data>ul {\n            padding: 0;\n        }\n        .page-div {\n            margin-top: 10px;\n        }\n        .page-info {\n            padding: 35px 35px 35px 55px;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"content\">\n        <div class=\"module\">\n            <div class=\"\">\n                <h3>\n                    搜索结果><span style=\"color: red;\">${keyword}</span>\n                </h3>\n                <hr>\n            </div>\n\n            <div class=\"bd\">\n                <div class=\"data\">\n                    <ul>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                            <li class=\"data-item-li\">\n                                <div class=\"to-big\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"/pictures/${goods.imagePaths[0].path}\" width=\"260px\" height=\"260px\" alt=\"\"/>\n                                    </a>\n                                </div>\n                                <p class=\"text-right\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                </p>\n                                <div class=\"text-right\">\n                                    <b>￥${goods.price}</b>\n                                </div>\n                                <div>\n                                    <c:if test=\"${goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <c:if test=\"${!goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                </div>\n                            </li>\n                        </c:forEach>\n\n                        <div class=\"clear-float\" style=\"clear: both;\"></div>\n                    </ul>\n                </div>\n                <div class=\"row page-div\">\n                    <div class=\"col-md-5 page-info\">\n                        当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                    </div>\n                    <div class=\"col-md-6\">\n                        <nav aria-label=\"Page navigation\">\n                            <ul class=\"pagination pagination-lg\">\n\n                                <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                    <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                        <li class=\"active\"><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                    <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                        <li><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                </c:forEach>\n\n                                <c:if test=\"${pageInfo.hasNextPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasNextPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                            </ul>\n                        </nav>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/shopcart.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-购物车</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/shopcart.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/shopcart.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <!-- \t<script>\n            $(document).ready(function(){\n                $(\".list-group-item\").hover(function(){\n                    $(this).children(\"div.sort-detail\").show();\n                },function(){\n                    $(this).children(\"div.sort-detail\").hide();\n                });\n            })\n        </script> -->\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <jsp:include page=\"header.jsp\"/>\n</div>\n<div class=\"shopping_cart\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"account_heading account_heading_ah\">\n                    <h1>购物车</h1>\n                </div>\n            </div>\n        </div>\n        <div class=\"row\">\n            <div class=\"all_wis_frm\">\n                <div class=\"col-md-12\">\n                    <div class=\"wishlist-content wishlist-content-2\">\n                        <form action=\"#\">\n                            <div class=\"wishlist-table wishlist-table-2 table-responsive\">\n                                <table id=\"cart-table\">\n                                    <thead>\n                                    <tr>\n                                        <th class=\"product-remove\"><span class=\"nobr\"></span></th>\n                                        <th class=\"product-thumbnail product-thumbnail-2\"></th>\n                                        <th class=\"product-name product-name_2\"><span\n                                                class=\"nobr\">商品</span></th>\n                                        <th class=\"product-price\"><span class=\"nobr\"> 价格\n\t\t\t\t\t\t\t\t\t\t\t\t</span></th>\n                                        <th class=\"product-stock-stauts\"><span class=\"nobr\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t数量 </span></th>\n                                        <th class=\"product-add-to-cart\"><span class=\"nobr\">总价</span></th>\n                                    </tr>\n                                    </thead>\n                                    <tbody>\n\n\n\n\n                                    </tbody>\n                                    <%--<tfoot>\n                                    <tr>\n                                        <td colspan=\"6\">\n                                            <div class=\"coupon\">\n                                                <!-- <label for=\"coupon_code\"></label>\n                                                    <input id=\"coupon_code\" class=\"input-text\" type=\"text\" placeholder=\"Coupon code\" value=\"\" name=\"coupon_code\"> -->\n                                                <a\n                                                        class=\"button_act button_act_3 button_act_333 button_act_tp \"\n                                                        href=\"./shopcart.jsp\">更新购物车</a>\n                                                <!-- <a class=\"button_act btn-tip \" href=\"#\">Update cart</a> -->\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    </tfoot>--%>\n                                </table>\n                            </div>\n                        </form>\n                        <div class=\"row\">\n                            <div class=\"col-md-6 col-xs-12\">\n                                <div class=\"cart_totals \">\n                                    <h2>总价</h2>\n                                    <table class=\"shop_table shop_table_responsive\">\n                                        <tbody>\n                                        <tr class=\"cart-subtotal\">\n                                            <th>小计</th>\n                                            <td data-title=\"Subtotal\"><span\n                                                    class=\"woocommerce-Price-amount amount\"> <span\n                                                    class=\"woocommerce-Price-currencySymbol\" id=\"total-num\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span></td>\n                                        </tr>\n                                        <tr class=\"order-total\">\n                                            <th>总额</th>\n                                            <td data-title=\"Total\"><strong> <span\n                                                    class=\"woocommerce-Price-amount amount\"> <span\n                                                    class=\"woocommerce-Price-currencySymbol\" id=\"total-price\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n                                            </strong></td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <div class=\"wc-proceed-to-checkout\">\n                                        <a class=\"button_act button_act-tc confirm-orders\" href=\"${pageContext.request.contextPath}/order\">确认订单</a>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"col-md-6 col-xs-12\"></div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" hidden>${pageContext.request.contextPath}</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/sidebar.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/19\n  Time: 14:36\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-sidebar\">\n    <header class=\"templatemo-site-header\">\n        <div class=\"square\"></div>\n        <h1>后台管理</h1>\n    </header>\n    <div class=\"mobile-menu-icon\">\n        <i class=\"fa fa-bars\"></i>\n    </div>\n    <nav class=\"templatemo-left-nav\">\n        <ul>\n            <li><a href=\"${pageContext.request.contextPath}/admin/user/show\"><i class=\"fa fa-user fa-fw\"></i>用户管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show\"><i class=\"fa fa-bar-chart fa-fw\"></i>商品管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/order/send\"><i class=\"fa fa-users fa-fw\"></i>订单管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\"><i class=\"fa fa-database fa-fw\"></i>活动管理</a></li>\n        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/show\"><i class=\"fa fa-map-marker fa-fw\"></i>活动管理</a></li>--%>\n            <li><a href=\"${pageContext.request.contextPath}/admin/chat\"><i class=\"fa fa-sliders fa-fw\"></i>客服管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/logout\"><i class=\"fa fa-eject fa-fw\"></i>退出系统</a></li>\n        </ul>\n    </nav>\n</div>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/userManage.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/22\n  Time: 11:18\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <%--swal弹框--%>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"\" class=\"active\">所有用户</a></li>\n                        <%--<li><a href=\"\">Dashboard</a></li>\n                        <li><a href=\"\">Overview</a></li>\n                        <li><a href=\"login.html\">Sign in form</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">Email<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系电话<span class=\"caret\"></span></a></td>\n                            <td>删除</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- JS -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>      <!-- jQuery -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.min.js\"></script> <!--  jQuery Migrate Plugin -->\n<script src=\"https://www.google.com/jsapi\"></script> <!-- Google Chart -->\n<script>\n    /* Google Chart\n     -------------------------------------------------------------------*/\n    // Load the Visualization API and the piechart package.\n    google.load('visualization', '1.0', {'packages':['corechart']});\n\n    // Set a callback to run when the Google Visualization API is loaded.\n    google.setOnLoadCallback(drawChart);\n\n    // Callback that creates and populates a data table,\n    // instantiates the pie chart, passes in the data and\n    // draws it.\n    function drawChart() {\n\n        // Create the data table.\n        var data = new google.visualization.DataTable();\n        data.addColumn('string', 'Topping');\n        data.addColumn('number', 'Slices');\n        data.addRows([\n            ['Mushrooms', 3],\n            ['Onions', 1],\n            ['Olives', 1],\n            ['Zucchini', 1],\n            ['Pepperoni', 2]\n        ]);\n\n        // Set chart options\n        var options = {'title':'How Much Pizza I Ate Last Night'};\n\n        // Instantiate and draw our chart, passing in some options.\n        var pieChart = new google.visualization.PieChart(document.getElementById('pie_chart_div'));\n        pieChart.draw(data, options);\n\n        var barChart = new google.visualization.BarChart(document.getElementById('bar_chart_div'));\n        barChart.draw(data, options);\n    }\n\n    $(document).ready(function(){\n        if($.browser.mozilla) {\n            //refresh page on browser resize\n            // http://www.sitepoint.com/jquery-refresh-page-browser-resize/\n            $(window).bind('resize', function(e)\n            {\n                if (window.RT) clearTimeout(window.RT);\n                window.RT = setTimeout(function()\n                {\n                    this.location.reload(false); /* false to get page from cache */\n                }, 200);\n            });\n        } else {\n            $(window).resize(function(){\n                drawChart();\n            });\n        }\n    });\n\n</script>\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>      <!-- Templatemo Script -->\n<script src=\"${pageContext.request.contextPath}/js/userManage.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/views/verificationcodeimg.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/22\n  Time: 9:50\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<%--<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>--%>\n<%@page import=\"com.zhang.ssmschoolshop.util.verificate.Verificate\" %>\n<%--<%\n    String path = request.getContextPath();\n    String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\";\n%>--%>\n<%@page contentType=\"image/jpeg\"%>\n<jsp:useBean id=\"image\" scope=\"page\" class=\"com.zhang.ssmschoolshop.util.verificate.Verificate\" />\n<%\n    String str = image.getCertPic(0, 0, response.getOutputStream());\n    // 将认证码存入SESSION\n    session.setAttribute(\"certCode\", str);\n    out.clear();\n    out = pageContext.pushBody();\n%>\n\n<html>\n<head>\n    <title>Title</title>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/WEB-INF/web.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n\t\t                     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\"\n         version=\"3.0\">\n  <display-name>Archetype Created Web Application</display-name>\n\n\n  <!--启动Spring的容器-->\n  <context-param>\n    <param-name>contextConfigLocation</param-name>\n    <param-value>classpath:applicationContext.xml</param-value>\n  </context-param>\n\n  <listener>\n    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>\n  </listener>\n\n  <!--SpringMVC的前端控制器，拦截所有请求-->\n  <!--<servlet>\n      <servlet-name>dispatcherServlet</servlet-name>\n      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>\n      <load-on-startup>1</load-on-startup>\n  </servlet>\n  <servlet-mapping>\n      <servlet-name>dispatcherServlet</servlet-name>\n      <url-pattern>/</url-pattern>\n  </servlet-mapping>-->\n  <servlet>\n    <servlet-name>SpringMVC</servlet-name>\n    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>\n    <init-param>\n      <param-name>contextConfigLocation</param-name>\n      <param-value>classpath:spring-mvc.xml</param-value>\n    </init-param>\n    <load-on-startup>1</load-on-startup>\n  </servlet>\n  <servlet-mapping>\n    <servlet-name>SpringMVC</servlet-name>\n    <url-pattern>/</url-pattern>\n  </servlet-mapping>\n\n  <!--字符编码过滤器,一定放在最前面-->\n  <filter>\n    <filter-name>CharacterEncodingFilter</filter-name>\n    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>\n    <init-param>\n      <param-name>encoding</param-name>\n      <param-value>utf-8</param-value>\n    </init-param>\n  </filter>\n  <filter-mapping>\n    <filter-name>CharacterEncodingFilter</filter-name>\n    <url-pattern>/*</url-pattern>\n  </filter-mapping>\n\n  <!--Rest风格的URI,将页面普通的post的请求转为delete或post请求-->\n  <filter>\n    <filter-name>HiddenHttpMethodFilter</filter-name>\n    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>\n  </filter>\n  <filter-mapping>\n    <filter-name>HiddenHttpMethodFilter</filter-name>\n    <url-pattern>/*</url-pattern>\n  </filter-mapping>\n\n</web-app>\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/bootstrap/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/bootstrap/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/bootstrap/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/chat.css",
    "content": ".chat-div {\n\twidth: 100%;\n\tmargin: 40px auto 0px auto;\n}\n\n.chat {\n\t/*margin: 30px;*/\n\twidth: 73%;\n\tdisplay: inline-block;\n\t/*margin-top: 0;*/\n\tmargin-left: 0%;\n\tposition: relative;\n\ttop: -45px;\n}\n\n.chat-content {\n\tpadding: 20px;\n\tbackground: #F8F8F8;\n\twidth: 100%;\n\theight: 500px;\n\toverflow-x: hidden;\n\toverflow-y: auto;\n}\n\n.chat-message {\n\tmargin-top: 8px;\n\tmargin-bottom: 8px;\n}\n\n.message-icon-left {\n\tposition: absolute;\n\tright: auto;\n\tleft: -21px;\n\tcolor: #FFF;\n}\n\n.message-icon-right {\n\tposition: absolute;\n\t/*left: 5px;*/\n\tright: -280px;\n\tcolor: #DDD;\n}\n\n.info-content {\n\tdisplay: inline-block !important;\n\tdisplay: inline;\n\twidth: auto;\n}\n\n.chat-message-content1 {\n\tposition: relative;\n\tfloat: left;\n\tbackground: #FFFFFF;\n\tmargin-right: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #DDD;\n\tborder-radius: 4px;\n}\n\n\n.chat-message-content2 {\n\tposition: relative;\n\tfloat: right;\n\tbackground: #34BBF9;\n\tmargin-left: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #34BBF9;\n\tborder-radius: 4px;\n}\n\n/*.form-group {\n\twidth: 100%;\n\theight: 100%;\n}*/\n\n.form-div {\n\t/*padding: 1%;*/\n}\n\n.input-div {\n\twidth: 86%;\n\tmargin: 2% 0.8% 2% 0.9%;\n}\n\n.send-div {\n\twidth: 11%;\n\theight: 53px;\n\tmargin-top: 2%;\n}\n\n#input-message {\n\twidth: 100%;\n}\n\n.send-div>input {\n\theight: 100%;\n}\n\n.chat-list {\n\twidth: 20%;\n\theight: 565px;\n\tdisplay: inline-block;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tmargin-left: 2%;\n\tposition: relative;\n\ttop: -15px;\n\t/*background: #EBEBEC;*/\n\n}\n\n.list-item {\n\theight: 66px;\n\tborder-right: 1px solid gray;\n\tbackground: #FAF7F4;\n\tpadding-top: 4px;\n\tpadding-left: 45px;\n\t/*font-size: 20px;*/\n}\n\n.list-item {\n\tdisplay: none;\n}\n\n#user-no {\n\tdisplay: none;\n}\n\n.a-card {\n    text-decoration: none !important;\n    display: block;\n    border: 1px solid #DDD;\n    margin: 0;\n    color: black;\n}\n\n.card {\n    height: 60px;\n    text-align: center;\n    padding-top: 25px;\n}\n\n.a-card:hover {\n    transition:transform .8s cubic-bezier(0.23, 1, 0.32, 1), box-shadow .8s cubic-bezier(0.23, 1, 0.32, 1);\n    box-shadow:0 0 20px rgba(0, 0, 0, 0.3);\n    transform:scale(1.01);\n    background-color: #F8F8F8;\n    z-index:2;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/chatrobot.css",
    "content": ".clear-float {\n\tclear: both;\n}\n\n#input-message {\n\t/*font-size: 30px;*/\n}\n\n.chat-div {\n\twidth: 100%;\n\tmargin: 0 auto;\n}\n\n.chat {\n\t/*margin: 30px;*/\n\twidth: 100%;\n\tdisplay: inline-block;\n\t/*margin-top: 0;*/\n\tmargin-left: 0%;\n\tposition: relative;\n\t/*top: -45px;*/\n}\n\n.chat-content {\n\tpadding: 20px;\n\tbackground: #F8F8F8;\n\twidth: 100%;\n\theight: 565px;\n\toverflow-x: hidden;\n\toverflow-y: auto;\n}\n\n.chat-message {\n\tmargin-top: 8px;\n\tmargin-bottom: 8px;\n}\n\n.message-icon-left {\n\tposition: absolute;\n\tright: auto;\n\tleft: -21px;\n\tcolor: #FFF;\n}\n\n.message-icon-right {\n\tposition: absolute;\n\t/*left: 5px;*/\n\tright: -280px;\n\tcolor: #DDD;\n}\n\n.info-content {\n\tdisplay: inline-block !important;\n\tdisplay: inline;\n\twidth: auto;\n}\n\n.chat-message-content1 {\n\tposition: relative;\n\tfloat: left;\n\tbackground: #FFFFFF;\n\tmargin-right: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #DDD;\n\tborder-radius: 4px;\n}\n\n\n.chat-message-content2 {\n\tposition: relative;\n\tfloat: right;\n\tbackground: #34BBF9;\n\tmargin-left: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #34BBF9;\n\tborder-radius: 4px;\n}\n\n/*.form-group {\n\twidth: 100%;\n\theight: 100%;\n}*/\n\n.form-div {\n\t/*padding: 1%;*/\n}\n\n.input-div {\n\twidth: 86%;\n\tmargin: 2% 0.8% 2% 0.9%;\n}\n\n.send-div {\n\twidth: 11%;\n\theight: 53px;\n\tmargin-top: 2%;\n}\n\n#input-message {\n\twidth: 100%;\n}\n\n.send-div>input {\n\theight: 100%;\n}\n\n.chat-list {\n\twidth: 20%;\n\theight: 625px;\n\tdisplay: inline-block;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tmargin-left: 2%;\n\tposition: relative;\n\ttop: 43px;\n\t/*background: #EBEBEC;*/\n\n}\n\n.list-item {\n\theight: 66px;\n\tborder-right: 1px solid gray;\n\tbackground: #FAF7F4;\n\tpadding-top: 4px;\n\tpadding-left: 45px;\n\t/*font-size: 20px;*/\n}\n\n::-webkit-scrollbar {\n    height: 10px;\n    width: 7px;\n    background: rgba(0,0,0,.1);\n}\n\n::-webkit-scrollbar-thumb {\n    background: rgba(8, 174, 237, 0.3);\n    border-radius: 6px;\n}\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/favorite.css",
    "content": "/**{\n    margin:0px;\n    padding:0px;\n}\n*/\nbody{\n    background:#e5e6d0;\n}\n\n.favorite {\n    margin-top: 2%;\n}\n\n.favorite-side {\n    margin-top: 2%;\n    width: 30%;\n}\n\n.fav-menu {\n    margin-top: 5%;\n}\n\n.fav-menu,#banner,#main-fav,#footer{\n    /*margin-top:1%;*/\n    /*width:1140px;*/\n}\n\n.caret-right {\n    position: absolute;\n    top: 22px;\n    left: 210px;\n}\n\n/* 万能的清除*/\n.clear{\n    clear:both;\n}\n.fav-menu{\n    padding-top:1px;\n}\n.fav-menu ul{\n    list-style:none;\n    /*padding-left: 15px;*/\n}\n.fav-menu>ul{\n    /*list-style:none;*/\n    padding-left: 15px;\n}\n\n.top-li {\n    border-top: 1px solid #FFFFFF;\n}\n\n.fav-menu ul li{\n    /*float:left;*/\n    margin:1px;\n    width: 230px;\n    border-bottom: 1px solid #FFFFFF;\n    border-right: 1px solid #FFFFFF;\n    /*border-left: 1px solid #FFFFFF;*/\n    position: relative;\n}\n\n.fav-menu ul li a{\n    color:#996699;\n   \n    font-family:Vivaldi;\n    text-align:center;\n    display:block;\n    width:120px;\n    height:50px;\n    line-height:46px;\n    font-size:25px;\n    margin-left: 22px;\n    text-decoration: none;\n}\n.fav-menu ul li a:hover{\n    background:#ffcccc;\n}\n.fav-menu ul li ul{\n    display:none;\n    width:120px;\n    position:absolute;\n    z-index: 10;\n    left: 100%;\n    top: 0%;\n    background:#ffcccc;\n}\n.fav-menu ul li:hover ul{\n    display:block;\n}\n.fav-menu ul li ul li{\n    width:120px;\n    position: relative;\n    right: 40px;\n}\n.fav-menu ul li ul li a{\n    width:120px;\n    padding-left: 0px;\n    margin-left: 0px;\n}\n.fav-menu ul li ul li a:hover{\n    background:#ff9999;\n}\n\n#main-fav{\n    padding:10px 10px;\n}\n/*#main-fav .container{\n    width:900px;\n    float:left;\n}\n*/#main-fav .product{\n    float:left;\n    padding-left:10px;\n    list-style:none;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/information.css",
    "content": ".ui-menu {\n\tposition: relative;\n\tz-index: 19;\n}\n\n.ui-menu li a {\n\tborder-bottom: 2px solid rgb(241, 241, 229);\n\tcolor: #2894FF;\n\twidth: 100%;\n}\n\n.ui-menu li a:hover, .ui-menu li.cur a {\n\tborder-bottom: 2px solid #2894FF;\n\tcolor: #2894FF;\n}\n\n.ui-menu a {\n\theight: 37px;\n\tline-height: 37px;\n\tfont-size: 16px;\n\tdisplay: inline-block;\n\ttext-align: center;\n\ttext-decoration: none;\n}\n\n.nav-tabs {\n\tborder-bottom: 1px solid #2894FF;\n}\n\n.well {\n\tbackground-color: #fff;\n\tborder-radius: 5px;\n\tborder: solid 1px #e5e6e6;\n\tbox-shadow: 0px 3px 5px #d2d6da;\n  /*box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);*/\n\tposition: relative\n}\n\n.well_condition {\n\tbackground-color: #fff;\n\tborder: solid 1px #e5e6e6;\n\tbox-shadow: 0px 3px 5px #d2d6da;\n\tborder-radius: 5px;\n}\n\n.bs-docs-example {\n\tdisplay: inline-block;\n\twidth: 500px;\n\tposition: relative;\n\tmargin: 15px 10px;\n\t\n\tpadding: 39px 19px 14px;\n\tbackground-color: #fff;\n\tborder: 1px solid #ddd;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n}\n\n.grid {\n\twidth: 100%;\n}\n\n.clear-border {\n\tborder: 0px !important;\n}\n\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #fa7c63;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n  text-decoration: none !important;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n.section-padding {\n  padding-bottom: 50px;\n}\n.section-title {\n  margin-bottom: 35px;\n}\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n::selection {\n   background: #b3d4fc;\n   text-shadow: none;\n}\n.browserupgrade {\n  margin: 0.2em 0;\n  background: #ccc;\n  color: #000;\n  padding: 0.2em 0;\n}\n\n/*----------------------------------------*/\n/*  23. Shopping cart area\n/*----------------------------------------*/\n.dm_content_2 {\n  margin-top: 36px;\n}\n.new_act_4{\n  margin-top: 20px;\n  margin-left: -15px\n}\n.cramb_area_4{\n  margin-left: -19px;\n}\n.button_act.button_act_3.button_act_333 {\n  margin-left: 94px;\n  margin-top: 2px;    \n}\n.wishlist-table-2 table th, .wishlist-table-2 table td {\n  font-family: Open Sans,sans-serif;\n  font-size: 12px;\n  font-weight: 700;\n  padding: 16px 28px;\n  text-align: left;\n  text-transform: uppercase;\n}\n.wishlist-table-2 table .product-thumbnail-2 {\n  width: 195px;\n}\n.product-thumbnail.product-thumbnail-2 img {\n  /* margin-left: 22px; */\n}\n.latest_es_from_2 > input[type=\"number\"] {\n  background: #ffffff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  font-weight: normal;\n  height: 40px;\n  padding: 0 10px;\n  transition: all 0.3s ease 0s;\n  width: 52px;\n  margin-left: 18px;    \n}\n.amount-list.amount-list-2 {\n  margin-left: 19px;\n}\n.coupon .input-text {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  height: 40px;\n  line-height: 40px;\n  width: 150px !important;\n  border: 1px solid #d3ced2;\n  box-sizing: border-box;\n  float: left;\n  line-height: 1;\n  margin: 0 4px 0 0;\n  outline: 0 none;\n  padding: 6px 11px 5px;\n  font-weight: normal;\n  border-radius: 3px;    \n}\n.product-remove.product-remove_2 > a {\n  margin-left: -34px;\n  padding: 0px 45px;\n}\n.button_act.button_act_3.button_act_333.button_act_tp{\n  margin-left: 83% !important;\n  margin-top: 0;\n}\n.button_act.btn-tip {\n  margin-left: 672px;\n}\n.button_act.btn-tip:hover{\n  background-color: #ebe9eb;\n  color: inherit;    \n}\n.cart_totals {\n  margin: 30px 0 0;\n}\n.cart_totals h2 {\n  font-size: 20px;\n  margin: 0 0 30px;\n  text-transform: uppercase;\n}\n.shop_table td {\n  border-top: 0 none;\n  padding: 20px 28px;\n}\n.cart_totals .cart-subtotal .amount, .cart_totals .order-total .amount {\n  font-size: 16px;\n  font-weight: bold;\n}\n.shop_table {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-collapse: separate;\n  border-radius: 5px;\n  margin: 0 -1px 34px 0;\n  text-align: left;\n  width: 100%;\n}\n.shop_table th {\n  font-weight: 700;\n  padding: 9px 12px;\n}\n.button_act.button_act-tc {\n  margin-bottom: 50px;\n}\n.coupon {\n  margin-bottom: 10px;\n  margin-top: 7px;\n}\n.account_heading.account_heading_ah {\n  margin: -6px 0;\n}\n\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0; \n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n\n.wishlist-table table {\n  background: #fff none repeat scroll 0 0;\n  border-color: #e8e8e9;\n  border-radius: 0;\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n  margin: 20px 0 33px;\n  width: 100%;\n}\n.wishlist-table table{}\n.wishlist-table table th {\n  font-weight: 600;\n}\n.wishlist-table table th, .wishlist-table table td {\n  border-bottom: 1px solid #e7e7e7;\n  border-right: 1px solid #e7e7e7;\n  font-size: 14px;\n  font-weight: 500;\n  padding: 15px 12px;\n  text-align: left;\n  text-transform: uppercase;\n  font-family: Open Sans,sans-serif;  \n}\n.wishlist-table table .product-remove {\n  padding: 20px 28px;\n  width: 20px;\n}\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n.wishlist-table table .product-thumbnail {\n  width: 100px;\n}\n.wishlist-table table td.product-price .amount {\n  font-weight: 700;\n}\n.wishlist-table table .wishlist-in-stock {\n  color: #297e29;\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 55px;\n  text-transform: capitalize;\n}\n/* \n.nav>li>a {\n\ttext-shadow: none !important;\n  padding: 0px !important;\n} */\n\n.form-control {\n  height: 32px;\n}\n\n.dropdown .caret {\n    margin-top: 0px !important;\n    margin-left: 2px;\n}\n\n.well {\n\twidth: 1090px !important;\n}\n\n.bs-docs-example {\n\twidth: \n}\n\n.part {\n\tmargin-left: 20px;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/infostyle.css",
    "content": "/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml, body {\n  font-family: 'Roboto', 'Helvetica', sans-serif;\n}\n.demo-avatar {\n  width: 48px;\n  height: 48px;\n  border-radius: 24px;\n}\n.demo-layout .mdl-layout__header .mdl-layout__drawer-button {\n  color: rgba(0, 0, 0, 0.54);\n}\n.mdl-layout__drawer .avatar {\n  margin-bottom: 16px;\n}\n.demo-drawer {\n  border: none;\n}\n/* iOS Safari specific workaround */\n.demo-drawer .mdl-menu__container {\n  z-index: -1;\n}\n.demo-drawer .demo-navigation {\n  z-index: -2;\n}\n/* END iOS Safari specific workaround */\n.demo-drawer .mdl-menu .mdl-menu__item {\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.demo-drawer-header {\n  box-sizing: border-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-justify-content: flex-end;\n      -ms-flex-pack: end;\n          justify-content: flex-end;\n  padding: 16px;\n  height: 151px;\n}\n.demo-avatar-dropdown {\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n  -webkit-flex-direction: row;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  width: 100%;\n}\n\n.demo-navigation {\n  -webkit-flex-grow: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n.demo-layout .demo-navigation .mdl-navigation__link {\n  display: -webkit-flex !important;\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -webkit-flex-direction: row;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  color: rgba(255, 255, 255, 0.56);\n  font-weight: 500;\n}\n.demo-layout .demo-navigation .mdl-navigation__link:hover {\n  background-color: #00BCD4;\n  color: #37474F;\n}\n.demo-navigation .mdl-navigation__link .material-icons {\n  font-size: 24px;\n  color: rgba(255, 255, 255, 0.56);\n  margin-right: 32px;\n}\n\n.demo-content {\n  max-width: 1080px;\n}\n\n.demo-charts {\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.demo-chart:nth-child(1) {\n  color: #ACEC00;\n}\n.demo-chart:nth-child(2) {\n  color: #00BBD6;\n}\n.demo-chart:nth-child(3) {\n  color: #BA65C9;\n}\n.demo-chart:nth-child(4) {\n  color: #EF3C79;\n}\n.demo-graphs {\n  padding: 16px 32px;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-align-items: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n}\n/* TODO: Find a proper solution to have the graphs\n * not float around outside their container in IE10/11.\n * Using a browserhacks.com solution for now.\n */\n_:-ms-input-placeholder, :root .demo-graphs {\n  min-height: 664px;\n}\n_:-ms-input-placeholder, :root .demo-graph {\n  max-height: 300px;\n}\n/* TODO end */\n.demo-graph:nth-child(1) {\n  color: #00b9d8;\n}\n.demo-graph:nth-child(2) {\n  color: #d9006e;\n}\n\n.demo-cards {\n  -webkit-align-items: flex-start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -webkit-align-content: flex-start;\n      -ms-flex-line-pack: start;\n          align-content: flex-start;\n}\n.demo-cards .demo-separator {\n  height: 32px;\n}\n.demo-cards .mdl-card__title.mdl-card__title {\n  color: white;\n  font-size: 24px;\n  font-weight: 400;\n}\n.demo-cards ul {\n  padding: 0;\n}\n.demo-cards h3 {\n  font-size: 1em;\n}\n.demo-updates .mdl-card__title {\n  min-height: 200px;\n  background-image: url('images/dog.png');\n  background-position: 90% 100%;\n  background-repeat: no-repeat;\n}\n.demo-cards .mdl-card__actions a {\n  color: #00BCD4;\n  text-decoration: none;\n}\n\n.demo-options h3 {\n  margin: 0;\n}\n.demo-options .mdl-checkbox__box-outline {\n  border-color: rgba(255, 255, 255, 0.89);\n}\n.demo-options ul {\n  margin: 0;\n  list-style-type: none;\n}\n.demo-options li {\n  margin: 4px 0;\n}\n.demo-options .material-icons {\n  color: rgba(255, 255, 255, 0.89);\n}\n.demo-options .mdl-card__actions {\n  height: 64px;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  box-sizing: border-box;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/login.css",
    "content": ".form-login {\n\tmargin-top: 15%;\n\t/* background-image: url(../image/tao.jpg); */\n}\n\nbody {\n\t/* background-image: url(../image/tao.jpg); */\n}\n\n.login-h2 {\n\tmargin-left: 25px;\n}\n\n.form-register {\n\tmargin-top: 6%;\n}\n\n.error {\n\tcolor: red;\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/main.css",
    "content": "/*li {\n\tdisplay: inline-block;\n\tlist-style: none;\n\tmargin-right: 7px;\n}*/\n \n#header {\n\tmargin-top: 8px;\n\t/*background: #F5F5F5;*/\n}\n#header-bottom {\n\t\n}\n#header-nav-middle {\n\tbackground-color: #222;\n\tborder-color: #080808;\n\n}\n\n#bs-example-navbar-collapse-1 {\n\tmargin-left: 150px;\n}\n\n.header-bottom {\n\theight: auto;\n}\n\n.clear-float {\n\tclear: both;\n}\n\n#mycarousel {\n\twidth: 80%;\n\tfloat: left;\n\tmargin-left: 1%;\n/*\tdisplay: inline;\n\toverflow: hidden;\n\tposition: relative;*/\n}\n\n.sort {\n\twidth: 19%;\n\theight: auto;\n\tfloat: left;\n\t/*position: relative;*/\n\t/*margin-right: 5%;*/\n}\n\n.sort-channel {\n\n}\n\n.sort-detail {\n\t/*float: left;*/\n\tposition: absolute;\n\tz-index: 10;\n\ttop: 0px;\n\t/*left: 218px;*/\n\tleft: 102%;\n\tbackground: white;\n\twidth: 300px;\n\tdisplay: none;\n\t/*float: left;*/\n\tpadding: 5px;\n\tborder:1px solid gray;\n\n\tborder-radius: 3px;\n\n}\n\n.sort-channel-list>li {\n\tlist-style: none;\n\tpadding: 10px 30px;\n}\n\n.list-group-item>a{\n\tcolor: black;\n\ttext-decoration: none;\n}\n\n/*.dl-horizontal dt {\n\ttext-align: left !important;\n\twidth: auto !important;\n}\n\n.dl-horizontal dd {\n\ttext-align: left !important;\n\twidth: auto !important;\n\tmargin-left: 0;\n}*/\n\n.dl-hor {\n\t/*border-top: none;*/\n\tfloat: left;\n\tclear: both;\n\tmargin: 10px 10px 10px 5px;\n}\n\n.dl-hor>dt {\n\tfloat: left;\n\tmargin-right: 18px;\n}\n\n.dl-hor>dd {\n\tfloat: left;\n}\n\n.dl-hor>dd>a {\n\tmargin-right: 8px;\n}\n\n.dl-hor>dt>a {\n\tcolor: red;\n}\n\n.hd>h2 {\n\tborder-left: 3px solid black;\n\tpadding-left: 10px;\n}\n\n.data>ul {\n\tpadding: 0 15px;\n\tmargin-bottom: 0 !important;\n}\n\n.data>ul>li {\n\tlist-style: none;\n\tfloat: left;\n\tmargin: 2px 9px;\n\tposition: relative;\n}\n\n.hd>hr {\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n}\n\n.content {\n\tmargin: 23px 8px;\n}\n\n.module {\n\tborder-bottom: 1px solid #EEE;\n\tmargin-top: 6px;\n}\n\np.text-right {\n\tmargin-right: 5px;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tfont-size: 20px;\n}\n\np.text-right>a {\n\tcolor: black;\n\ttext-decoration: none;\n}\n\np.text-right>a:hover {\n\tcolor: orange;\n}\n\ndiv.text-right {\n\tmargin-right: 5px;\n}\n\n.text-right>b {\n\tcolor: #f40;\n\tfont-size: 15px;\n}\n\n.like-button {\n\tfont-size: 15px !important;\n\tposition: absolute !important;\n\tz-index: 10 !important;\n\tleft: 70% !important;\n\ttop: 60% !important;\n}\n\n/*.like-button2 {\n\tfont-size: 15px !important;\n\tposition: absolute !important;\n\tz-index: 10 !important;\n\tleft: 80% !important;\n\ttop: 70% !important;\n\tdisplay: none !important;\n}*/\n\n.dropdown-menu {\n\ttop: 75% !important;\n}\n\n.login-out {\n\tcolor: red !important;\n}\n\n.navbar-nav>li>a {\n\tcolor: #d4c8bb !important;\n}\n\n.navbar-nav>li>a:hover{\n\tcolor: #e83038 !important;\n}\n\n.logo-word {\n\tfont-family:chiller;\n\tfont-size:25px;\n\tcolor:#dad5d5 !important;\n}\n\n.log-word:hover {\n\tcolor:red !important;\n}\n\n.to-big:hover {\n    transition:transform .8s cubic-bezier(0.23, 1, 0.32, 1), box-shadow .8s cubic-bezier(0.23, 1, 0.32, 1);\n    box-shadow:0 0 20px rgba(0, 0, 0, 0.3);\n    transform:scale(1.05);\n    z-index:2;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/order.css",
    "content": ".header-border {\n    border-bottom: solid 1px #c6c5c5;\n}\n\n.h4-mar{\n    margin-top: 30px;\n}\n\n.h4-mar-2 {\n    margin-top: 30px;\n}\n\n.address>.radio {\n    padding-left: 50px;\n}\n\n.radio>label {\n    margin: 5px 0 5px 0;\n}\n\n.address-check input[type='checkbox']:checked {\n    background: #FFF0E8;\n    border: solid 1px #f40;\n}\n\n.manage-a {\n    font-size: 15px;\n    color: #2aabd2;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/release.css",
    "content": "@charset \"utf-8\";\n/* CSS Document */\n\n.release {\n  margin-left: 10%;\n  width: 80%;\n}\n\n.submit-input {\n  /*width:30%; */\n  /*margin-left:*/\n}\n\n.upload-button {\n  /*width: 30%*/;\n  margin-left: 0;\n}\n\nh1 {\n  /*margin-left:-50px;*/\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/shopcart.css",
    "content": "﻿/*  1. Template default css\n/*========================================*/\n@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i|Oswald:300,400,700');\n\nhtml,\nbody {\n height: 100%;\n}\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #fa7c63;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n  text-decoration: none !important;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n.section-padding {\n  padding-bottom: 50px;\n}\n.section-title {\n  margin-bottom: 35px;\n}\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n::selection {\n   background: #b3d4fc;\n   text-shadow: none;\n}\n.browserupgrade {\n  margin: 0.2em 0;\n  background: #ccc;\n  color: #000;\n  padding: 0.2em 0;\n}\n\n/*----------------------------------------*/\n/*  23. Shopping cart area\n/*----------------------------------------*/\n.dm_content_2 {\n  margin-top: 36px;\n}\n.new_act_4{\n  margin-top: 20px;\n  margin-left: -15px\n}\n.cramb_area_4{\n  margin-left: -19px;\n}\n.button_act.button_act_3.button_act_333 {\n  margin-left: 94px;\n  margin-top: 2px;    \n}\n.wishlist-table-2 table th, .wishlist-table-2 table td {\n  font-family: Open Sans,sans-serif;\n  font-size: 12px;\n  font-weight: 700;\n  padding: 16px 28px;\n  text-align: left;\n  text-transform: uppercase;\n}\n.wishlist-table-2 table .product-thumbnail-2 {\n  width: 195px;\n}\n.product-thumbnail.product-thumbnail-2 img {\n  /* margin-left: 22px; */\n}\n.latest_es_from_2 > input[type=\"number\"] {\n  background: #ffffff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  font-weight: normal;\n  height: 40px;\n  padding: 0 10px;\n  transition: all 0.3s ease 0s;\n  width: 52px;\n  margin-left: 18px;    \n}\n.amount-list.amount-list-2 {\n  margin-left: 19px;\n}\n.coupon .input-text {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  height: 40px;\n  line-height: 40px;\n  width: 150px !important;\n  border: 1px solid #d3ced2;\n  box-sizing: border-box;\n  float: left;\n  line-height: 1;\n  margin: 0 4px 0 0;\n  outline: 0 none;\n  padding: 6px 11px 5px;\n  font-weight: normal;\n  border-radius: 3px;    \n}\n.product-remove.product-remove_2 > a {\n  margin-left: -34px;\n  padding: 0px 45px;\n}\n.button_act.button_act_3.button_act_333.button_act_tp{\n  margin-left: 83% !important;\n  margin-top: 0;\n}\n.button_act.btn-tip {\n  margin-left: 672px;\n}\n.button_act.btn-tip:hover{\n  background-color: #ebe9eb;\n  color: inherit;    \n}\n.cart_totals {\n  /*margin: 0px 0 0;*/\n}\n.cart_totals h2 {\n  font-size: 20px;\n  margin: 0 0 30px;\n  text-transform: uppercase;\n}\n.shop_table td {\n  border-top: 0 none;\n  padding: 20px 28px;\n}\n.cart_totals .cart-subtotal .amount, .cart_totals .order-total .amount {\n  font-size: 16px;\n  font-weight: bold;\n}\n.shop_table {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-collapse: separate;\n  border-radius: 5px;\n  margin: 0 -1px 34px 0;\n  text-align: left;\n  width: 100%;\n}\n.shop_table th {\n  font-weight: 700;\n  padding: 9px 12px;\n}\n.button_act.button_act-tc {\n  margin-bottom: 50px;\n}\n.coupon {\n  margin-bottom: 10px;\n  margin-top: 7px;\n}\n.account_heading.account_heading_ah {\n  margin: -6px 0;\n}\n\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0;\n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n\n.wishlist-table table {\n  background: #fff none repeat scroll 0 0;\n  border-color: #e8e8e9;\n  border-radius: 0;\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n  margin: 20px 0 33px;\n  width: 100%;\n}\n.wishlist-table table{}\n.wishlist-table table th {\n  font-weight: 600;\n}\n.wishlist-table table th, .wishlist-table table td {\n  border-bottom: 1px solid #e7e7e7;\n  border-right: 1px solid #e7e7e7;\n  font-size: 14px;\n  font-weight: 500;\n  padding: 15px 12px;\n  text-align: left;\n  text-transform: uppercase;\n  font-family: Open Sans,sans-serif;  \n}\n.wishlist-table table .product-remove {\n  padding: 20px 28px;\n  width: 20px;\n}\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n.wishlist-table table .product-thumbnail {\n  width: 100px;\n}\n.wishlist-table table td.product-price .amount {\n  font-weight: 700;\n}\n.wishlist-table table .wishlist-in-stock {\n  color: #297e29;\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 55px;\n  text-transform: capitalize;\n}\n\ntable th, table td {\n  border-bottom: 1px solid #e1e1e1;\n  border-right: 1px solid #e1e1e1;\n  padding: 8px;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/shopdetail.css",
    "content": "@charset \"utf-8\";\n\n/*通用样式*/\n.shopdetails a{\n\ttext-decoration:none;\n\tcolor:#333;\n\tfont-size:12px;\n}\n.shopdetails ul,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,p{\n\tpadding:0; margin:0;\n\tlist-style:none;\n}\n.shopdetails img{ border:0px;}\n.clear{\n\tclear:both;\n}\n\n\n/*放大镜*/\n#leftbox{\n\twidth:400px;\n\tz-index:999;\n\tmargin-left: 15px;\n\t/*position:absolute;*/\n}\n#showbox { background:#eee;}\n#showbox img{\n\tz-index: 100;\n}\n#showbox span {\n\tbackground:url(../image/whitebg.png) repeat;\n}\n#showsum {\n\tleft:25px;\n\tmargin-top:10px;\n}\n#showsum span {\n\tborder:1px solid #ddd;\n}\n#showsum span.sel {\n\tborder:1px solid #f60;\n}\n\n.showpage {\n\twidth:400px;\n\tposition:relative;\n}\n.showpage a {\n\tdisplay:block; width:15px;\n\tborder:1px solid #ddd;\n\theight:60px; line-height:60px;\n\tbackground:#eee;\n\ttext-align:center;\n\tfont-size:18px;\n\tposition:absolute;\n\tleft:0; top:-62px;\n\ttext-decoration:none;\n\tcolor:#999;}\n.showpage a#shownext {\n\tleft:auto; right:0;\n}\n.showpage a:hover {\n\tbackground:#ccc;\n\tcolor:#777;\n}\n\n.rel-div {\n    position: relative;\n    top: 50px;\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/style.css",
    "content": "﻿/*-----------------------------------------------------------------------------------\n\n    Template Name: Orienko Responsive eCommerce Fashion Template\n    Template URI: http://bootexperts.com\n    Description: This is html5 template\n    Author: BootExperts\n    Author URI: http://bootexperts.com\n    Version: 1.0\n\n===============================================================\n\nCSS INDEX\n===================\n1. Template default css\n\n5. product area\n6. plus area\n7. catagory area\n8. differ pic area\n9. lumia area\n10. top rate area\n11. fchared area\n12. blog area\n13. logo area\n14. Checkout page\n15. newsletter area\n16. footer top area\n    16.1 footer middle area\n    16.2 footer botom area\n17. home page 2\n18. home page 3\n19. shop area left\n20. shop area right\n21. my account area\n22. wishlist area\n23. shopping cart area\n24. simple product area\n25. variable product area\n26. grouped product area\n\n==============================================================*/\n\n\n/*========================================*/\n\n/*  1. Template default css\n/*========================================*/\n@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i|Oswald:300,400,700');\n\n.big-font {\n  font-size: 20px !important;\n  padding-top: 20px;\n}\n\n.main-detail-nav>li {\n  display: inline-block;\n}\n\n.main-detail-nav {\n  margin-left: 15px !important;\n}\n\nhtml,\nbody {\n height: 100%;\n}\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #39ADB4;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0;\n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n/*----------------------------------------*/\n/*  6. Plus area\n/*----------------------------------------*/\n.plus_area {\n  margin-bottom: 38px;\n}\n.pix_new {\n  display: inline-block;\n  margin: 0;\n  max-width: 100%;\n  position: relative;\n  vertical-align: top;\n  z-index: 9;\n}\n.pix_new a::before {\n  background: rgba(255, 255, 255, 0.3) none repeat scroll 0 0;\n  bottom: 0;\n  content: \"\";  \n  left: 0;\n  opacity: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 99;\n}\n.pix_new img {\n  height: auto;\n  max-width: 100%;\n  vertical-align: top;\n} \n.pix_new a {\n  display: block;\n  overflow: hidden;\n  position: relative;\n}\n.pix_new a:hover::before {\n   left: 50%;\n   opacity: 1;\n   right: 50%;\n   transition: all 900ms ease 0s;\n}\n/*----------------------------------------*/\n/*  7. Catagory area\n/*----------------------------------------*/\n.favtabs > li {\n  display: inline-block;\n}\n.favtabs > li > a {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 1px solid #dfdfdf !important;\n  border-radius: 3px;\n  display: block;\n  font-size: 13px;\n  height: 33px;\n  line-height: 31px;\n  margin: 1;\n  padding: 0 15px;\n  position: relative;\n  transition: all 0.3s ease 0s;\n  color: #666;\n}\n.favtabs li a:hover{\n  background: #39ADB4;\n  color: #fff;\n  border-color: #39ADB4 !important;\n  border-width: 1px 1px 2px !important;    \n}\n.favtabs > li.active > a {\n  background: #39ADB4;\n  color: #fff;\n  border-color: #39ADB4!important;\n  border-image: none !important;\n  border-style: solid !important;\n  border-width: 1px 1px 2px !important;     \n}\n.favtabs {\n  margin: 0;\n  position: absolute;\n  right: 0;\n  top: -45px;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n  opacity: 0;\n}\n.feature-carousel:hover.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n    opacity: 1;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: 137px;\n  width: 100%;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 14px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 15px;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-prev:hover {\n  border-color:#39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-next:hover {\n  border-color:#39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n/*----------------------------------------*/\n/*  8. Differ pic area\n/*----------------------------------------*/\n.differ_pic {\n  margin-bottom: 38px;\n}\n/*----------------------------------------*/\n/*  9. Lumia area\n/*----------------------------------------*/\n\n.lumia_area {\n  margin-bottom: 38px;\n}\n/*----------------------------------------*/\n/*  10. Top rate area\n/*----------------------------------------*/\n.top_rate_area {\n  margin-bottom: 8px;\n  overflow: hidden;\n}\n.top_rate_area.top_rate_area_2 {\n  margin-bottom: 2px;\n}\n.llc_pro {\n  float: left;\n  width: 100px;\n}\n.product_name_new h2 a {\n  font-size: 14px;\n}\n.product_price.product_price_new_3 {\n  margin-top: -3px;\n}\n.sinle_pic_2 {\n  border: 0;\n  overflow: hidden;\n  position: relative;\n}\n.sinle_pic_2 a {\n  position: relative;\n  display: block;\n}\n.sinle_pic_2 img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic_2 img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros-ex:hover .sinle_pic_2 img.secondary-img,\n.all-pros-ex:hover .sinle_pic_2 img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n}\n.product_content_2 {\n  border: 0 none;\n  margin-bottom: 8px;\n  margin-left: 111px;\n  margin-top: -11px;\n  padding: 0 0 0 11px;\n  text-align: left;\n}\n.all-pros-ex {\n  animation-delay: 100ms;\n  animation-duration: 0.5s;\n  margin-top: 25px;\n  overflow: hidden;\n  position: relative;\n  border-bottom: 1px solid#e5e5e5;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -71px;\n  width: 100%;\n  left: 14px;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 187px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-prev:hover {\n  border-color: #39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-next:hover {\n  border-color: #39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.single-sidebar {\n  float: left;\n  margin: 0 0 30px;\n  padding: 20px;\n  width: 90%;\n  border: 1px solid#e1e1e1;\n}\n.single-sidebar h3 {\n  color: #444;\n  font-size: 16px;\n  margin: 0 0 25px;\n text-transform: uppercase;\n}\n.compare_content .new_tag > a {\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  display: inline-block;\n  font-size: 12px !important;\n  font-weight: normal;\n  line-height: 30px;\n  margin: 0 5px 5px 0;\n  padding: 0 12px;\n  text-transform: capitalize;\n  color: #666;\n}\n.new_tag a:hover {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-color: #39ADB4;\n  color: #fff;\n}\n/*----------------------------------------*/\n/*  11. Fchared area\n/*----------------------------------------*/\n.fchered_area {\n  margin-bottom: 30px;\n}\n.fchered_item {\n  background: #fff none repeat scroll 0 0;\n  padding: 0 0 25px;\n  text-align: center;\n}\n.fechered_pix {\n  border-bottom: 1px solid#e1e1e1;\n}\n.fechered_heading h3 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 14px;\n  font-weight: bold;\n  margin: 25px 0 20px;\n  text-transform: uppercase;\n}\na.view_button {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px !important;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n  cursor: pointer\n}\na.view_button:hover {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-color: #39ADB4;\n  color: #fff;\n}\n.chard_ex_al {\n  border: 1px solid #e1e1e1;\n  margin-bottom: 38px;\n}\n.indicator-brand-5.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -103px;\n  width: 100%;\n  left: 10px;\n}\n.indicator-brand-5.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n}\n.indicator-brand-bg.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 1062px;\n}\n/*----------------------------------------*/\n/*  12. Blog area\n/*----------------------------------------*/\n.blog {\n  margin-bottom: 31px;\n  overflow: hidden;\n}\n.blog_thumb {\n  position: relative;\n}\n.blog_thumb a::before {\n  backface-visibility: hidden;\n  background: rgba(63, 63, 63, 0.5) none repeat scroll 0 0;\n  bottom: 0px;\n  content: \"\";\n  left: 0;\n  opacity: 0;\n  overflow: hidden;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  top: 0;\n  transition: opacity 0.4s ease 0s;\n  z-index: 2;\n}\n.blog_thumb a::after {\n  bottom: 0;\n  color: #fff;\n  content: \"\";\n  font-family: FontAwesome;\n  font-size: 30px;\n  height: 30px;\n  left: 0;\n  line-height: 30px;\n  margin: auto;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  transform: scaleX(-1);\n  transition: transform 400ms ease 0s;\n  visibility: hidden;\n  width: 30px;\n  z-index: 11;\n}\n.blog_thumb a {\n  display: block;\n  overflow: hidden;\n}\n.blog_thumb a:hover::before {\n  opacity: 1;\n  visibility: visible;\n}\n.blog_thumb a:hover::after {\n  opacity: 1;\n  transform: scaleX(1);\n  visibility: visible;\n}\n.blog_thumb a img {\n  backface-visibility: hidden;\n  transition: opacity 0.5s ease 0s, transform 0.5s ease 0s;\n}\n.blog_thumb a:hover img {\n  transform: scale3d(1.1, 1.1, 1);\n}\n.blog_thumb .blogdate {\n  background: #fff none repeat scroll 0 0;\n  border-radius: 100%;\n  bottom: -12px;\n  color: #888888;\n  font-size: 13px;\n  height: 60px;\n  left: 0;\n  line-height: 1;\n  margin: 0 auto;\n  padding: 4px;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  width: 60px;\n  z-index: 11;\n}\n.blog_thumb .blogdate div {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-bottom: 2px solid #39ADB4;\n  border-radius: 100%;\n  color: #ffffff;\n  display: block;\n  font-size: 11px;\n  height: 100%;\n  text-align: center;\n  text-transform: uppercase;\n  width: 100%;\n}\n.blog_info {\n  margin: 20px 0 0;\n  position: relative;\n}\n.blog_info .post-title {\n  font-family: Open Sans,sans-serif;\n  font-size: 16px;\n  font-weight: 600;\n  text-transform: capitalize;\n  color: #333;    \n}\n.post-title > a {\n  color: #333333;\n}\n.blog_info .post-title a:hover {\n  color: #fa7c63;\n}\n.blog_thumb .blogdate div .day {\n  display: block;\n  font-family: Oswald, sans-serif;\n  font-size: 16px;\n  padding: 10px 0 3px;\n}\n.blog_info .post-excerpt {\n  clear: both;\n  margin: 10px 0;\n  color: #666\n}\n.blog_info .readmore-text {\n  font-weight: bold;\n  text-decoration: underline;\n}\n.blog_info .readmore-text:hover {\n  color: #fa7c63;\n}\n.indicator-brand-6.owl-theme .owl-controls .owl-buttons {\n  left: 9px;\n  position: absolute;\n  top: -98px;\n  width: 100%;\n}\n.indicator-brand-6.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 772px;\n  position: absolute;\n  right: 0;\n}\n/*----------------------------------------*/\n/*  13. Logo area\n/*----------------------------------------*/\n.main_brand {\n  margin-bottom: 10px;\n  padding: 14px;\n}\n.all_brand {\n  border: 1px solid#e1e1e1;\n}\n.all_brand.all_brand_zx.indicator-brand.indicator-brand-7.owl-carousel.owl-theme {\n  background: #ffffff none repeat scroll 0 0;\n}\n.brand_pix {\n  margin-bottom: 14px;\n  margin-top: 20px;\n}\n.brand {\n  margin-bottom: 18px;\n}\n.brand.brand-2.brand-3 {\n  margin-top: 15px;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons {\n  left: -2px;\n  position: absolute;\n  top: -105px;\n  width: 100%;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 1065px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons div.owl-next {\n  right: -2px;\n}\n.main_brand.main_brand_tf {\n  margin-top: -13px;\n  padding: 28px;\n}\n\n\n\n/*----------------------------------------*/\n/*  24. Simple product area\n/*----------------------------------------*/\n.elv_heading h3{\n  font-weight: normal;\n}\n#gallery_new a {\n  padding-bottom: 15px;\n}\n.last_button_area_px{\n  margin: -14px 0 8px;\n}\n.cramb_area_5 > li::after {\n  content: \"\";\n}\n.cramb_area.cramb_area_5 {\n  margin-top: 20px;\n}\n.cramb_area_5{\n  border-bottom: 1px solid#e1e1e1;\n  margin-left: 4px;    \n}\n.cramb_area.cramb_area_2 {\n  border-bottom: 0 none;\n}\n.cramb_area.cramb_area_2 > li::after {\n  display: none;\n}\n.cramb_area.cramb_area_2.cramb_area_3 {\n  border-bottom: 1px solid #e1e1e1;\n}\n.shop_menu_2 ul li.br-active{\n  color: #39ADB4;\n}\n.zoomContainer {\n  border: 1px solid #e1e1e1;\n}\n#gallery_new a {\n  float: left;\n  width: 25%;\n  margin-top: 25px;    \n}\n.elavator_area {\n  overflow: hidden;\n  padding-bottom: 50px;\n}\n.evavet_description{\n  margin-top: 20px; \n}\n.elavetor_social {\n  border-top: 1px solid #d2d2d2;\n  margin: 15px 0 0;\n  padding: 15px 0 0;\n}\n.widget-title{\n  display: inline-block;\n  font-size: 11px;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n ul.social-link {\n  display: inline-block;\n  list-style: outside none none;\n  margin: 0 5px 5px 0;\n  padding: 0;\n}\n.social-link li{\n  display: inline-block;\n}\n.social-link li{\n  padding: 0 10px;\n}\n.old-.price-2{\n  font-size: 20px;\n  font-weight: 600;\n  color: #666;    \n}\n.spical-price-2{\n  color: #fa7c63;\n  font-size: 20px;\n  font-weight: 600;\n}\n.cart-btn-area{\n    margin: 20px 0;\n}\n.cart-btn-area > input[type=\"number\"] {\n  border: 1px solid #e1e1e1;\n  font-size: 15px;\n  height: 55px;\n  line-height: 55px;    \n  padding: 0 10px;\n  text-align: center;\n  width: 60px;\n  border-radius: 3px;    \n}\n.button_act.button_act_ct {\n  margin-bottom: 8px;\n}\nbutton.add-tocart {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #467ecb none repeat scroll 0 0;\n  border-color: #3060a3;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #ffffff;\n  display: inline-block;\n  font-family: Oswald,sans-serif;\n  font-size: 18px;\n  font-weight: normal;\n  height: 55px;\n  padding: 0 20px !important;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n  margin-left: 8px;    \n}\nbutton.add-tocart:hover{\n background: #39ADB4;\n color: #fff;\n border-color: #39ADB4;\n}\n.comapre_area {\n  margin-left: 21px;\n  margin-top: 10px;\n}\n.show-2 {\n  margin-left: 9px;\n}\n.new_meta {\n  border-top: 1px solid #d2d2d2;\n  margin: 20px 0 0;\n  padding: 10px 0 0;\n}\n .sku_wrapper {\n  display: block;\n  font-weight: bold;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n .sku_wrapper span {\n  font-weight: normal;\n  text-transform: none;\n}\n.tagged_as {\n  display: block;\n  font-weight: bold;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n.tab_area_start {\n  padding: 50px 0;\n}\n.favtabs.favtabs-2 {\n  right: 954px;\n}\n.favtabs-2 > li {\n  margin: 2px;\n}\n.favtabs-2 > li > a {\n  background: #eee;    \n  height: 50px;\n  line-height: 50px;\n  padding: 0 18px;\n  text-transform: uppercase;\n  font-size: 16px;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;    \n}\n.tb_desc{\n  border: 1px solid #e1e1e1;\n  border-radius: 0;\n  box-shadow: none;\n  padding: 20px;\n  margin-top: 7px;\n  text-align: left;\n  overflow: hidden;\n}\n.tb_desc > h2 {\n  font-size: 20px;\n  font-weight: normal;\n  margin: 0 0 20px;\n}\n.favtabs.favtabs-2::after {\n  background: #39ADB4 none repeat scroll 0 0;\n  color: #ff0000;\n  content: \"\";\n  height: 3px;\n  left: 2px;\n  position: absolute;\n  top: 50px;\n  width: 1140px;\n  z-index: 99999;\n}\n.another_icon.fa.fa-heart {\n  border: 2px solid #dedede;\n  border-radius: 3px;    \n  font-size: 18px;\n  height: 40px;\n  line-height: 37px;\n  margin-right: 8px;\n  text-align: center;\n  width: 40px;\n  margin-bottom: 10px; \n  color: #999999;  \n}  \n.add_defi > a:hover .another_icon.fa.fa-heart{\n   background: #39ADB4;\n   border: 2px solid #39ADB4;\n   color: #fff;    \n}\n.add_defi, .add_defi_2 > a {\n  font-weight: 400;\n  text-transform: uppercase;\n  font-family: Oswald,sans-serif;\n}\n.another_icon.fa.fa-refresh{\n  border: 2px solid #dedede;\n  border-radius: 3px;    \n  font-size: 18px;\n  height: 40px;\n  line-height: 37px;\n  margin-right: 8px;\n  text-align: center;\n  width: 40px;\n  color: #999999;    \n}\n.add_defi_2 > a:hover .another_icon.fa.fa-refresh{\n   background: #fa7c63;\n   border: 2px solid #fa7c63;\n   color: #fff;    \n}\n.review_area_heading #comnt h2{\n  font-size: 25px;\n  font-weight: normal;\n  margin: 0 0 20px;\n}\n.review_area_heading #comnt ol.commentlist li img.avatar {\n  background: #ebe9eb none repeat scroll 0 0;\n  border: 1px solid #e4e1e3;\n  box-shadow: none;\n  float: left;\n  height: auto;\n  left: 0;\n  margin: 0;\n  padding: 3px;\n  position: absolute;\n  top: 0;\n  width: 32px;\n}\n .review_area_heading #comnt ol.commentlist li .comment-text {\n  border: 1px solid #e4e1e3;\n  border-radius: 4px;\n  margin: 0 0 0 50px;\n  padding: 1em 1em 0;\n}\n.star-rating {\n  float: right;\n  font-size: 1em;\n  height: 1em;\n  line-height: 1;\n  overflow: hidden;\n  position: relative;\n  width: 5.4em;\n}\n.review_area_heading #comnt ol.commentlist {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  list-style: outside none none;\n  margin: 0;\n  width: 100%;\n}\n .review_area_heading #comnt ol.commentlist li {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 center;\n  border: 0 none;\n  margin: 0 0 20px;\n  padding: 0;\n  position: relative;\n}\n.review_area_heading #comnt ol.commentlist li img.avatar {\n  background: #ebe9eb none repeat scroll 0 0;\n  border: 1px solid #e4e1e3;\n  box-shadow: none;\n  float: left;\n  height: auto;\n  left: 0;\n  margin: 0;\n  padding: 3px;\n  position: absolute;\n  top: 0;\n  width: 32px;\n}\n.price_rating_2 > a > i {\n  color: #666;\n  font-size: 12px;\n}\n#comnt{\n float: left;\n width: 100%;\n padding-right: 20px;    \n}\n.review_form_area {\n  border-color: #e1e1e1;\n  border-style: solid;\n  border-width: 0 0 0 1px;\n  float: left;\n  padding: 0 0 0 30px;\n  width: 40%;\n}\n.revew_form_content {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  margin: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n #reply-title {\n  font-size: 20px;\n  font-weight: normal;\n  margin: 0 0 20px;\n} #commentform p label {\n  display: block;\n  font-weight: normal;\n}\n.price_rating_3 > a > i {\n  color:#666;\n  font-size: 14px;\n}\n.price_rating_3 > a > i:hover{\n    color: #fa7c63;\n}\n.mix_type input:not([type]), .mix_type input[type=\"text\"], .mix_type input[type=\"password\"], .mix_type input[type=\"date\"], .mix_type input[type=\"datetime\"], .mix_type input[type=\"datetime-local\"], .mix_type input[type=\"month\"], .mix_type input[type=\"week\"], .mix_type input[type=\"email\"], .mix_type input[type=\"number\"], .mix_type input[type=\"search\"], .mix_type input[type=\"tel\"], .mix_type input[type=\"time\"], .mix_type input[type=\"url\"], .mix_type input[type=\"color\"], textarea {\n  background: #fff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  height: 40px;\n  padding: 5px;\n  transition: all 0.3s ease 0s;\n}\n#commentform input {\n  border: 1px solid #e1e1e1;\n  max-width: 500px;\n  padding: 5px 10px;\n  width: 100%;\n}\n #commentform p.form-submit input {\n  height: 35px;\n  line-height: 35px;\n  padding: 0 10px;\n}\n.revew_form_content textarea {\n  box-sizing: border-box;\n  width: 100%;\n}\n.revew_form_content #comment {\n  height: 75px;\n}\n.comment {\n  font-weight: normal;\n}\n #commentform p label {\n  display: block;\n  font-weight: normal;\n}\n.form-submit input{\n  border: none;\n  background-color: #ebe9eb;\n  font-weight: 700;\n  color: #515151;    \n}\n.form-submit input:hover {\n  background-color: #dad8da;\n  color: #515151;\n  text-decoration: none;\n}\n.price_rating.price_rating_2.price_rating_3 {\n  margin-top: -1px;\n  margin-bottom: 18px;    \n}\n.required_menu{\n  color: #666;\n}\n.comment-form-comment, .comment-form-author, .comment-form-email {\n  margin-bottom: 14px;\n}\n.brand.brand-2 {\n  margin-top: 0;\n}\n/*----------------------------------------*/\n/*  25. Variable product area\n/*----------------------------------------*/\n .bar_box_3 select {\n  border: 1px solid #eaeaea;\n  background-color: #f7f7f7;\n  color: #666;\n  height: 28px;\n  line-height: 28px;\n  width: 310px;\n  padding: 0 10px; \n  margin-left: 15px;     \n}\n.bar_box.bar_box_3 label{\n  font-weight: normal\n}\nform.cart {\n  margin: 20px 0;\n}\n.bar_box_4 select{\n  margin-left: 22px;\n  margin-bottom: 30px;\n} \n.favtabs.favtabs-2.favtabs-3 {\n  right: 731px;\n}\ntable.shop_attributes {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  border-color: rgba(0, 0, 0, 0.1) -moz-use-text-color -moz-use-text-color;\n  border-image: none;\n  border-style: dotted none none;\n  border-width: 1px 0 0;\n  margin-bottom: 1.618em;\n  width: 100%;\n}\ntable.shop_attributes th {\n  font-weight: 700;\n  padding: 8px;\n  width: 150px;\n  border-bottom: 1px dotted rgba(0, 0, 0, 0.1);\n  border-top: 0 none;\n  line-height: 1.5;\n  margin: 0;    \n}\ntable.shop_attributes td {\n  font-style: italic;\n  padding: 0;\n}\ntable.shop_attributes td p {\n  margin: 0;\n  padding: 8px 0;\n}\ntable.shop_attributes .alt td, table.shop_attributes .alt th {\n  background: rgba(0, 0, 0, 0.024) none repeat scroll 0 0;\n}\ntable th, table td {\n  border-bottom: 1px solid #e1e1e1;\n  border-right: 1px solid #e1e1e1;\n  padding: 8px;\n}\n/*----------------------------------------*/\n/*  26. Grouped product area\n/*----------------------------------------*/\n.latest_es_from > input[type=\"number\"] {\n  border: 1px solid #e1e1e1;\n  font-size: 15px;\n  height: 55px;\n  line-height: 55px;    \n  padding: 0 10px;\n  text-align: center;\n  width: 60px;\n  border-radius: 3px;    \n}\n.price {\n  font-size: 16px;\n  font-weight: normal;\n  padding: 2px 5px 10px 216px;\n}\n.price ins {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  color: #fa7c63;\n  font-weight: 600;\n}\n.al_df_frm{\n  border-bottom: 1px solid#e1e1e1;\n}\n.new_labl > a {\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 10px;\n}\nbutton.add-tocart-2 {\n margin-left: -3px;\n margin-top: 25px;\n}\n.price.price-2 {\n  margin-bottom: 10px;\n}\n.price.price_zx {\n  margin-left: -210px;\n}\n.dspc_area {\n  margin-bottom: 23px;\n  margin-left: 67px;\n  margin-top: -57px;\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/sweetalert.css",
    "content": "body.stop-scrolling {\n  height: 100%;\n  overflow: hidden; }\n\n.sweet-overlay {\n  background-color: black;\n  /* IE8 */\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\";\n  /* IE8 */\n  background-color: rgba(0, 0, 0, 0.4);\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: none;\n  z-index: 10000; }\n\n.sweet-alert {\n  background-color: white;\n  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  width: 478px;\n  padding: 17px;\n  border-radius: 5px;\n  text-align: center;\n  position: fixed;\n  left: 50%;\n  top: 50%;\n  margin-left: -256px;\n  margin-top: -200px;\n  overflow: hidden;\n  display: none;\n  z-index: 99999; }\n  @media all and (max-width: 540px) {\n    .sweet-alert {\n      width: auto;\n      margin-left: 0;\n      margin-right: 0;\n      left: 15px;\n      right: 15px; } }\n  .sweet-alert h2 {\n    color: #575757;\n    font-size: 30px;\n    text-align: center;\n    font-weight: 600;\n    text-transform: none;\n    position: relative;\n    margin: 25px 0;\n    padding: 0;\n    line-height: 40px;\n    display: block; }\n  .sweet-alert p {\n    color: #797979;\n    font-size: 16px;\n    text-align: center;\n    font-weight: 300;\n    position: relative;\n    text-align: inherit;\n    float: none;\n    margin: 0;\n    padding: 0;\n    line-height: normal; }\n  .sweet-alert fieldset {\n    border: none;\n    position: relative; }\n  .sweet-alert .sa-error-container {\n    background-color: #f1f1f1;\n    margin-left: -17px;\n    margin-right: -17px;\n    overflow: hidden;\n    padding: 0 10px;\n    max-height: 0;\n    webkit-transition: padding 0.15s, max-height 0.15s;\n    transition: padding 0.15s, max-height 0.15s; }\n    .sweet-alert .sa-error-container.show {\n      padding: 10px 0;\n      max-height: 100px;\n      webkit-transition: padding 0.2s, max-height 0.2s;\n      transition: padding 0.25s, max-height 0.25s; }\n    .sweet-alert .sa-error-container .icon {\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background-color: #ea7d7d;\n      color: white;\n      line-height: 24px;\n      text-align: center;\n      margin-right: 3px; }\n    .sweet-alert .sa-error-container p {\n      display: inline-block; }\n  .sweet-alert .sa-input-error {\n    position: absolute;\n    top: 29px;\n    right: 26px;\n    width: 20px;\n    height: 20px;\n    opacity: 0;\n    -webkit-transform: scale(0.5);\n    transform: scale(0.5);\n    -webkit-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n    -webkit-transition: all 0.1s;\n    transition: all 0.1s; }\n    .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {\n      content: \"\";\n      width: 20px;\n      height: 6px;\n      background-color: #f06e57;\n      border-radius: 3px;\n      position: absolute;\n      top: 50%;\n      margin-top: -4px;\n      left: 50%;\n      margin-left: -9px; }\n    .sweet-alert .sa-input-error::before {\n      -webkit-transform: rotate(-45deg);\n      transform: rotate(-45deg); }\n    .sweet-alert .sa-input-error::after {\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n    .sweet-alert .sa-input-error.show {\n      opacity: 1;\n      -webkit-transform: scale(1);\n      transform: scale(1); }\n  .sweet-alert input {\n    width: 100%;\n    box-sizing: border-box;\n    border-radius: 3px;\n    border: 1px solid #d7d7d7;\n    height: 43px;\n    margin-top: 10px;\n    margin-bottom: 17px;\n    font-size: 18px;\n    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n    padding: 0 12px;\n    display: none;\n    -webkit-transition: all 0.3s;\n    transition: all 0.3s; }\n    .sweet-alert input:focus {\n      outline: none;\n      box-shadow: 0px 0px 3px #c4e6f5;\n      border: 1px solid #b4dbed; }\n      .sweet-alert input:focus::-moz-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus:-ms-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus::-webkit-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n    .sweet-alert input::-moz-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-ms-clear {\n      display: none; }\n    .sweet-alert input:-ms-input-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-webkit-input-placeholder {\n      color: #bdbdbd; }\n  .sweet-alert.show-input input {\n    display: block; }\n  .sweet-alert .sa-confirm-button-container {\n    display: inline-block;\n    position: relative; }\n  .sweet-alert .la-ball-fall {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    margin-left: -27px;\n    margin-top: 4px;\n    opacity: 0;\n    visibility: hidden; }\n  .sweet-alert button {\n    background-color: #8CD4F5;\n    color: white;\n    border: none;\n    box-shadow: none;\n    font-size: 17px;\n    font-weight: 500;\n    -webkit-border-radius: 4px;\n    border-radius: 5px;\n    padding: 10px 32px;\n    margin: 26px 5px 0 5px;\n    cursor: pointer; }\n    .sweet-alert button:focus {\n      outline: none;\n      box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }\n    .sweet-alert button:hover {\n      background-color: #7ecff4; }\n    .sweet-alert button:active {\n      background-color: #5dc2f1; }\n    .sweet-alert button.cancel {\n      background-color: #C1C1C1; }\n      .sweet-alert button.cancel:hover {\n        background-color: #b9b9b9; }\n      .sweet-alert button.cancel:active {\n        background-color: #a8a8a8; }\n      .sweet-alert button.cancel:focus {\n        box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }\n    .sweet-alert button[disabled] {\n      opacity: .6;\n      cursor: default; }\n    .sweet-alert button.confirm[disabled] {\n      color: transparent; }\n      .sweet-alert button.confirm[disabled] ~ .la-ball-fall {\n        opacity: 1;\n        visibility: visible;\n        transition-delay: 0s; }\n    .sweet-alert button::-moz-focus-inner {\n      border: 0; }\n  .sweet-alert[data-has-cancel-button=false] button {\n    box-shadow: none !important; }\n  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n    padding-bottom: 40px; }\n  .sweet-alert .sa-icon {\n    width: 80px;\n    height: 80px;\n    border: 4px solid gray;\n    -webkit-border-radius: 40px;\n    border-radius: 40px;\n    border-radius: 50%;\n    margin: 20px auto;\n    padding: 0;\n    position: relative;\n    box-sizing: content-box; }\n    .sweet-alert .sa-icon.sa-error {\n      border-color: #F27474; }\n      .sweet-alert .sa-icon.sa-error .sa-x-mark {\n        position: relative;\n        display: block; }\n      .sweet-alert .sa-icon.sa-error .sa-line {\n        position: absolute;\n        height: 5px;\n        width: 47px;\n        background-color: #F27474;\n        display: block;\n        top: 37px;\n        border-radius: 2px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n          left: 17px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n          right: 16px; }\n    .sweet-alert .sa-icon.sa-warning {\n      border-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-body {\n        position: absolute;\n        width: 5px;\n        height: 47px;\n        left: 50%;\n        top: 10px;\n        -webkit-border-radius: 2px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-dot {\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        -webkit-border-radius: 50%;\n        border-radius: 50%;\n        margin-left: -3px;\n        left: 50%;\n        bottom: 10px;\n        background-color: #F8BB86; }\n    .sweet-alert .sa-icon.sa-info {\n      border-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::before {\n        content: \"\";\n        position: absolute;\n        width: 5px;\n        height: 29px;\n        left: 50%;\n        bottom: 17px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::after {\n        content: \"\";\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        margin-left: -3px;\n        top: 19px;\n        background-color: #C9DAE1;\n        left: 50%; }\n    .sweet-alert .sa-icon.sa-success {\n      border-color: #A5DC86; }\n      .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {\n        content: '';\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        position: absolute;\n        width: 60px;\n        height: 120px;\n        background: white;\n        -webkit-transform: rotate(45deg);\n        transform: rotate(45deg); }\n      .sweet-alert .sa-icon.sa-success::before {\n        -webkit-border-radius: 120px 0 0 120px;\n        border-radius: 120px 0 0 120px;\n        top: -7px;\n        left: -33px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 60px 60px;\n        transform-origin: 60px 60px; }\n      .sweet-alert .sa-icon.sa-success::after {\n        -webkit-border-radius: 0 120px 120px 0;\n        border-radius: 0 120px 120px 0;\n        top: -11px;\n        left: 30px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 0px 60px;\n        transform-origin: 0px 60px; }\n      .sweet-alert .sa-icon.sa-success .sa-placeholder {\n        width: 80px;\n        height: 80px;\n        border: 4px solid rgba(165, 220, 134, 0.2);\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        box-sizing: content-box;\n        position: absolute;\n        left: -4px;\n        top: -4px;\n        z-index: 2; }\n      .sweet-alert .sa-icon.sa-success .sa-fix {\n        width: 5px;\n        height: 90px;\n        background-color: white;\n        position: absolute;\n        left: 28px;\n        top: 8px;\n        z-index: 1;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg); }\n      .sweet-alert .sa-icon.sa-success .sa-line {\n        height: 5px;\n        background-color: #A5DC86;\n        display: block;\n        border-radius: 2px;\n        position: absolute;\n        z-index: 2; }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n          width: 25px;\n          left: 14px;\n          top: 46px;\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg); }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n          width: 47px;\n          right: 8px;\n          top: 38px;\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg); }\n    .sweet-alert .sa-icon.sa-custom {\n      background-size: contain;\n      border-radius: 0;\n      border: none;\n      background-position: center center;\n      background-repeat: no-repeat; }\n\n/*\n * Animations\n */\n@-webkit-keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@-webkit-keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@-webkit-keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n@keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n.showSweetAlert[data-animation=pop] {\n  -webkit-animation: showSweetAlert 0.3s;\n  animation: showSweetAlert 0.3s; }\n\n.showSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.showSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideFromTop 0.3s;\n  animation: slideFromTop 0.3s; }\n\n.showSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideFromBottom 0.3s;\n  animation: slideFromBottom 0.3s; }\n\n.hideSweetAlert[data-animation=pop] {\n  -webkit-animation: hideSweetAlert 0.2s;\n  animation: hideSweetAlert 0.2s; }\n\n.hideSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.hideSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideToTop 0.4s;\n  animation: slideToTop 0.4s; }\n\n.hideSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideToBottom 0.3s;\n  animation: slideToBottom 0.3s; }\n\n@-webkit-keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@-webkit-keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n@keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n.animateSuccessTip {\n  -webkit-animation: animateSuccessTip 0.75s;\n  animation: animateSuccessTip 0.75s; }\n\n.animateSuccessLong {\n  -webkit-animation: animateSuccessLong 0.75s;\n  animation: animateSuccessLong 0.75s; }\n\n.sa-icon.sa-success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n  animation: rotatePlaceholder 4.25s ease-in; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n.animateErrorIcon {\n  -webkit-animation: animateErrorIcon 0.5s;\n  animation: animateErrorIcon 0.5s; }\n\n@-webkit-keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n@keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n.animateXMark {\n  -webkit-animation: animateXMark 0.5s;\n  animation: animateXMark 0.5s; }\n\n@-webkit-keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n@keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n.pulseWarning {\n  -webkit-animation: pulseWarning 0.75s infinite alternate;\n  animation: pulseWarning 0.75s infinite alternate; }\n\n@-webkit-keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n@keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n.pulseWarningIns {\n  -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n  animation: pulseWarningIns 0.75s infinite alternate; }\n\n@-webkit-keyframes rotate-loading {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n@keyframes rotate-loading {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n/* Internet Explorer 9 has some special quirks that are fixed here */\n/* The icons are not animated. */\n/* This file is automatically merged into sweet-alert.min.js through Gulp */\n/* Error icon */\n.sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/* Success icon */\n.sweet-alert .sa-icon.sa-success {\n  border-color: transparent\\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n.la-ball-fall,\n.la-ball-fall > div {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.la-ball-fall {\n  display: block;\n  font-size: 0;\n  color: #fff; }\n\n.la-ball-fall.la-dark {\n  color: #333; }\n\n.la-ball-fall > div {\n  display: inline-block;\n  float: none;\n  background-color: currentColor;\n  border: 0 solid currentColor; }\n\n.la-ball-fall {\n  width: 54px;\n  height: 18px; }\n\n.la-ball-fall > div {\n  width: 10px;\n  height: 10px;\n  margin: 4px;\n  border-radius: 100%;\n  opacity: 0;\n  -webkit-animation: ball-fall 1s ease-in-out infinite;\n  -moz-animation: ball-fall 1s ease-in-out infinite;\n  -o-animation: ball-fall 1s ease-in-out infinite;\n  animation: ball-fall 1s ease-in-out infinite; }\n\n.la-ball-fall > div:nth-child(1) {\n  -webkit-animation-delay: -200ms;\n  -moz-animation-delay: -200ms;\n  -o-animation-delay: -200ms;\n  animation-delay: -200ms; }\n\n.la-ball-fall > div:nth-child(2) {\n  -webkit-animation-delay: -100ms;\n  -moz-animation-delay: -100ms;\n  -o-animation-delay: -100ms;\n  animation-delay: -100ms; }\n\n.la-ball-fall > div:nth-child(3) {\n  -webkit-animation-delay: 0ms;\n  -moz-animation-delay: 0ms;\n  -o-animation-delay: 0ms;\n  animation-delay: 0ms; }\n\n.la-ball-fall.la-sm {\n  width: 26px;\n  height: 8px; }\n\n.la-ball-fall.la-sm > div {\n  width: 4px;\n  height: 4px;\n  margin: 2px; }\n\n.la-ball-fall.la-2x {\n  width: 108px;\n  height: 36px; }\n\n.la-ball-fall.la-2x > div {\n  width: 20px;\n  height: 20px;\n  margin: 8px; }\n\n.la-ball-fall.la-3x {\n  width: 162px;\n  height: 54px; }\n\n.la-ball-fall.la-3x > div {\n  width: 30px;\n  height: 30px;\n  margin: 12px; }\n\n/*\n * Animation\n */\n@-webkit-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@-moz-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -moz-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@-o-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -o-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -o-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-145%);\n    -moz-transform: translateY(-145%);\n    -o-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(145%);\n    -moz-transform: translateY(145%);\n    -o-transform: translateY(145%);\n    transform: translateY(145%); } }\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/css/templatemo-style.css",
    "content": "/*\n\nVisual Admin Template\nhttp://www.templatemo.com/preview/templatemo_455_visual_admin\n\nTABLE OF CONTENT\n\t1. Universal Styles\n\t2. Left Column\n\t3. Right Column\n\t4. Charts & Maps\n\t5. Login\n\t6. Manage Users\n\t7. Preferences\n\t8. Media Queries\n----------------------------------------------*/\n/* 1. Universal Styles\n----------------------------------------------*/\n* {\tfont-family: 'Open Sans', sans-serif; }\nbody {\tfont-size: 13px; }\nbody, .templatemo-left-nav { background: #1f2124; }\nh1, h2, h3 { margin: 0; }\nh2 { font-size: 1.6em; }\nh3 {\n\tcolor: #7f7f7f;\n\tfont-size: 1.4em;\n}\nul {\n\tlist-style-type: none;\n    margin: 0;\n    padding: 0;\n}\na:hover { text-decoration: none; }\nnav li {\n\tfont-size: 1.1em;\n\tlist-style: none;\t\n\ttext-transform: uppercase;\n}\n.templatemo-inline-block {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.templatemo-block {\tdisplay: block; }\n.templatemo-position-relative {\tposition: relative; }\n.blue-text { color: #39ADB4; }\n.white-text { color: white; }\n.green-bg {\tbackground-color: #39ADB4; }\n.yellow-bg { background-color: #D8D138; }\n.white-bg {\tbackground-color: white; }\n.white-bg .fa-times { background-color: #d7d7d7; }\n.white-bg .fa-times:hover {\tbackground: #83ccd1; }\n.orange-bg {\n\tbackground-color: #F17A54;\n\tcolor: white;\n}\n.orange-bg .fa-times {\tbackground-color: #F0A790; }\n.orange-bg .fa-times:hover { background-color: #E14311; }\n.pink-bg {\n\tbackground-color: #D7425C;\n\tcolor: white;\n}\n.pink-bg .fa-times { background-color: #E57C8F;\t}\n.pink-bg .fa-times:hover { background-color: #BD1F3B; }\n.blue-bg {\n\tbackground-color: #3275BB;\n\tcolor: white;\n}\n.blue-bg .fa-times { background-color: #6792C0; }\n.blue-bg .fa-times:hover { background-color: #2C639C; }\n.light-gray-bg { background-color: #efefef; }\n.padding-right-25 {\tpadding-right: 25px; }\n.margin-bottom-0 {\tmargin-bottom: 0; }\n.margin-bottom-5 {\tmargin-bottom: 5px; }\n.margin-bottom-10 {\tmargin-bottom: 10px; }\n.margin-bottom-30 {\tmargin-bottom: 30px; }\n.margin-bottom-70 {\tmargin-bottom: 70px; }\n.margin-right-15 { margin-right: 15px; }\n.margin-10 { margin: 10px; }\n.width-100 { width: 100%; }\n.no-border { border: none; }\n.border-radius-10 { border-radius: 10px; }\nfooter { padding: 15px; }\n\n/* 2. Left Column\n-----------------------------*/\n.templatemo-sidebar { width: 300px; }\n.square {\n\twidth: 25px;\n\theight: 25px;\n\tborder: 3px solid #13895F;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.circle {\n\twidth: 15px;\n\theight: 15px;\n\tborder-radius: 50%;\n}\n.templatemo-site-header { margin: 25px 30px; }\n.templatemo-site-header h1 {\n\tcolor: white;\n\tdisplay: inline-block;\n\tfont-size: 1.8em;\n\tfont-weight: 300;\n\tletter-spacing: 1.5px;\n\tmargin: 0 5px;\t\n\ttext-transform: uppercase;\n\tvertical-align: middle;\n}\n.profile-photo-container { position: relative; }\n.profile-photo-overlay {\n\tbackground-color: rgba(4, 152, 114, 0.35);\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: all 0.3s ease;\n}\n.profile-photo-overlay:hover { background-color: rgba(4, 152, 114, 0); }\n\n/* Search form */\n.templatemo-search-form {\n\tfont-size: 1.1em;\n\tmargin: 50px 20px;\t\t\n}\n.templatemo-search-form .input-group { width: 100%; }\n.templatemo-search-form .input-group .form-control {\n\tbackground-color: #18191b;\n\tborder: none;\n\tborder-radius: 10px;\n\tcolor: #DDD;\n\tpadding-left: 30px;\n}\n.form-control:focus {\n  border-color: #13895F;\n  outline: 0;\n  box-shadow: inset 0 1px 1px rgba(19,137,95,.075),0 0 8px rgba(19,137,95,.6);\n}\n.form-control.highlight {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n.form-control.highlight::-webkit-input-placeholder { /* WebKit browsers */\n    color:    #ccc;\n}\n.form-control.highlight:-moz-placeholder { /* Mozilla Firefox 4 to 18 */\n   color:    #ccc;\n   opacity:  1;\n}\n.form-control.highlight::-moz-placeholder { /* Mozilla Firefox 19+ */\n   color:    #ccc;\n   opacity:  1;\n}\n.form-control.highlight:-ms-input-placeholder { /* Internet Explorer 10+ */\n   color:    #ccc;\n}\n.templatemo-search-form .input-group { position: relative; }\n.fa-search {\n    height:32px;\n    width:32px;\n    border: none;\n    cursor: pointer;\n    color:white;\n    background:transparent;\n    position:absolute;\n    top: 0;\n\tleft: 0;\n\tz-index: 100;\n}\n.mobile-menu-icon { \n\tcursor:pointer;\n\tdisplay:none; \n}\n.templatemo-left-nav li { font-weight: 300; }\n.templatemo-left-nav a.active,\n.templatemo-left-nav a:hover {\n\tbackground: #18191b;\n\tborder-left: 8px solid #13895F;\n}\n.templatemo-left-nav a {\n\tcolor: #e9e9ea;\n\tdisplay: block;\n\tpadding: 30px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-left-nav .fa { margin-right: 15px; }\n\n/* 3. Right Column\n------------------------------*/\n.templatemo-top-nav-container {\n\tbackground-color: white;\n\tpadding: 28px 50px;\n \tbox-shadow: 0px 0px 2px 2px rgba(161, 159, 159, 0.18);\n}\n.templatemo-top-nav li {\n    float: left;\n    list-style: none;\n}\n.templatemo-top-nav a {\n\tcolor: #7f7f7f;\n    display: block;\n    padding: 0 50px;\n    border-left: 2px solid #c5c5c5;\n}\n.templatemo-top-nav li:last-child a { border-right: 2px solid #c5c5c5; }\n.templatemo-top-nav a:hover,\n.templatemo-top-nav a.active {\n\tcolor: #39ADB4;\n}\n\n/* Main Content Area */\n.templatemo-content {\n  margin-top: 0px;\n  min-height: 600px;\n  padding: 0;  \n  overflow-x: hidden;\n}\n.templatemo-content-container {\tpadding: 40px 50px; }\n.templatemo-flex-row {\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n}\n.col-1 {\n\t-webkit-flex: 1;\n\t    -ms-flex: 1;\n\t        flex: 1;\n}\n.col-2 {\n\t-webkit-flex: 2;\n\t    -ms-flex: 2;\n\t        flex: 2;\n}\n\n/* Content Widget */\n.templatemo-content-widget {\n\tborder-radius: 10px;\n\tpadding: 30px;\t\n\tposition: relative;\n\tmargin: 10px;\n \tbox-shadow: 0px 0px 1px 1px rgba(161, 159, 159, 0.1);\n}\n.templatemo-content-widget.no-padding {\tpadding: 0; }\n.fa-times {\n\tborder-radius: 15px;\n  \tcolor: white;\n  \tcursor: pointer;\n\tpadding: 4px 5px;\n  \tposition: absolute;\n  \ttop: 15px;\n  \tright: 15px;\n  \tz-index: 100;\n  \ttransition: all 0.3s ease;\n}\n.fa-heart {\n  color: white;\n  cursor: pointer;\n  font-size: 1.4em;\n  position: absolute;\n  top: 30px;\n  right: 30px;\n  z-index: 100;\n  transition: all 0.3s ease;\n}\n.fa-heart:hover { color: #39ADB4; }\n.progress {\tdisplay: block; }\n.panel-default>.panel-heading {\n\tbackground-color: #39ADB4;\n\tborder-top-left-radius: 10px;\n\tborder-top-right-radius: 10px;\n\tcolor: white;\n\tpadding: 15px;\n}\n.panel-default .fa-times {\n\ttop: 12px;\n\tbackground-color: #67B5B9;\n}\n.panel-default .fa-times:hover { background-color: #297B7F;\t}\n.panel { border-radius: 10px; }\n.pagination-wrap {\n\tmargin-right: 10px;\n\ttext-align: right;\n}\n.pagination>li>a {\n\tborder-color: #E9E8E8;\n\tcolor: #a6a6a6;\n\tmargin: 2px;\n\tpadding: 10px;\t\n}\n.pagination>li>a,\n.pagination>li:first-child>a,\n.pagination>li:last-child>a {\n\tborder-radius: 10px;\n}\n.pagination>.active>a, \n.pagination>.active>a:focus, \n.pagination>.active>a:hover {\n\tbackground-color: #39ADB4;\n\tborder-color: #E9E8E8;\n}\n.table { margin-bottom: 0; }\n.table>tbody>tr>td { padding: 10px 15px; }\n.table>thead>tr>td { padding: 15px; }\n.media { margin-top: 0; }\n.media-body { vertical-align: middle; }\n.badge {\n\tbackground-color: #d6973d;\n\tborder-radius: 5px;\n\tmargin-left: 5px;\n\tpadding: 5px 10px;\n\tvertical-align: top;\n}\n.templatemo-img-bordered {\n\tborder: 1px solid #ccc;\n\tpadding: 3px;\n}\n\n/* 4. Charts & Maps - http://codepen.io/shoogledesigns/pen/BfLkA\n----------------------------------------------------------------*/\n.templatemo-chart {\n\twidth: 100%;\n\theight: 300px;\n}\n#timeline_div {\theight: auto; }\n\n/* JQVMap */\n.jqvmap-zoomin, .jqvmap-zoomout {\n    width: 15px;\n    height: 15px;\n}\n.vmap { height: 300px; }\n\n/* 5. Login\n------------------------------*/\n.templatemo-login-widget {\n\tmax-width: 450px;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tpadding: 50px;\n}\n.templatemo-login-widget .square {\n\twidth: 18px;\n\theight: 18px;\n}\n.templatemo-login-widget header { margin-bottom: 40px; }\n.templatemo-login-widget h1 {\n\tdisplay: inline-block;\n\tfont-size: 1.8em;\n\ttext-align: center;\n\ttext-transform: uppercase;\n\tvertical-align: middle;\n}\n.templatemo-login-form .form-group { margin-bottom: 20px; }\n.templatemo-login-form .form-group:last-child {\tmargin-bottom: 0; }\n.input-group-addon { background: none; }\n.btn-primary {\n\tborder-radius: 2px;\n\tbackground-color: #39ADB4;\n\tborder: none;\t\n\tcolor: white;\t\n}\n.btn-primary:hover { background-color: #2A858B; }\n.templatemo-blue-button, \n.templatemo-white-button {\n\tborder-radius: 2px;\n\tpadding: 10px 30px;\n\ttext-transform: uppercase;\n\ttransition: all 0.3s ease;\n}\n.templatemo-blue-button {\n\tbackground-color: #39ADB4;\n\tborder: none;\t\n\tcolor: white;\t\n}\n.templatemo-blue-button:hover {\tbackground-color: #2A858B; }\n.templatemo-white-button {\n\tbackground-color: white;\n\tborder: 1px solid #39ADB4;\t\n\tcolor: #39ADB4;\t\n}\n.templatemo-white-button:hover { background-color: #eff2f3;\t}\n.templatemo-register-widget {\n\tmax-width: 450px;\n\tpadding: 15px;\n\ttext-align: center;\n}\n.templatemo-register-widget p {\tmargin-bottom: 0; }\n.checkbox label { padding-left: 0; }\n.font-weight-400 { font-weight: 400; }\n\n/* Style checkboxes and radio buttons\nhttp://webdesign.tutsplus.com/tutorials/quick-tip-easy-css3-checkboxes-and-radio-buttons--webdesign-8953 */\ninput[type=\"checkbox\"] {  display:none; }\ninput[type=\"checkbox\"] + label span {\n    display:inline-block;\n    width:26px;\n    height:25px;\n    margin:-1px 4px 0 0;\n    vertical-align:middle;\n    background:url(../image/checkbox-radio-sheet.png) left top no-repeat;\n    cursor:pointer;\n}\ninput[type=\"checkbox\"]:checked + label span {\n    background:url(../image/checkbox-radio-sheet.png) -26px top no-repeat;\n}\ninput[type=\"radio\"] { display:none; }\ninput[type=\"radio\"] + label span {\n    display:inline-block;\n    width:26px;\n    height:25px;\n    margin:-1px 4px 0 0;\n    vertical-align:middle;\n    background:url(../image/checkbox-radio-sheet.png) -52px top no-repeat;\n    cursor:pointer;\n}\ninput[type=\"radio\"]:checked + label span {\n    background:url(../image/checkbox-radio-sheet.png) -78px top no-repeat;\n}\n\n/* 6. Manage Users\n------------------------------*/\n.templatemo-sort-by:hover {\tcolor: #ded9d9; }\n.templatemo-edit-btn {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: black;\n    background: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-edit-btn:hover {\n\tbackground-color: #39ADB4;\n\tborder: 1px solid #39ADB4;\n\tcolor: white;\n}\n\n.templatemo-activity-btn {\n    border: 1px solid #ddd;\n    border-radius: 3px;\n    color: black;\n    background: white;\n    padding: 5px 15px;\n    transition: all 0.3s ease;\n}\n.templatemo-activity-btn:hover {\n    background-color: #39ADB4;\n    border: 1px solid #39ADB4;\n    color: white;\n}\n\n.description {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: black;\n\tbackground: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.description {\n\tbackground-color: #39ADB4;\n\tborder: 1px solid #39ADB4;\n\tcolor: white;\n}\n\n.templatemo-delete-btn {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: red;\n    background: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-delete-btn:hover {\n\tbackground-color: red;\n\tborder: 1px solid red;\n\tcolor: white;\n}\n\n.templatemo-link { color: #607D8B; }\n.templatemo-link:hover { color: #39ADB4; }\n.templatemo-overflow-hidden { overflow: hidden; }\n.templatemo-user-table thead {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n.panel>.table-responsive:last-child>.table:last-child, .panel>.table:last-child {\n  border-bottom-right-radius: 10px;\n  border-bottom-left-radius: 10px;\n}\n.panel>.table:first-child {\n  border-top-left-radius: 10px;\n  border-top-right-radius: 10px;\n}\n.templatemo-social-icons-container {\n\tbackground-color: #f4f3f3;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-justify-content: space-between;\n\t    -ms-flex-pack: justify;\n\t        justify-content: space-between;\n\tbox-shadow: 0px 0px 1px 1px rgba(161, 159, 159, 0.1);\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 50px;\n\tborder-bottom-left-radius: 10px;\n\tborder-bottom-right-radius: 10px;\n\tborder-top: 1px solid #dedede;\n}\n.social-icon-wrap {\n\twidth: 33%;\n\theight: 100%;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-align-items: center;\n\t    -ms-flex-align: center;\n\t        align-items: center;\n\t-webkit-justify-content: center;\n\t    -ms-flex-pack: center;\n\t        justify-content: center;\n}\n.social-icon-wrap:nth-child(2) {\n\tborder-left: 1px solid #dedede;\n\tborder-right: 1px solid #dedede;\n}\n.templatemo-social-icon {\n\tbackground-color: #a6a6a6;\n\tborder-radius: 50%;\n\tcolor: white;\n\tcursor: pointer;\n\tfont-size: 1.5em;\n\tpadding-top: 8px;\n\twidth: 35px;\n\theight: 35px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-social-icon:hover {\tbackground-color: #39ADB4; }\n.templatemo-content-img-bg {\n\tbackground-position: center;\n\tbackground-attachment: stretch;\n\tmin-height: 300px;\n}\n.content-bg-img {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tborder-radius: 10px;\n\twidth: 100%;\n\theight: 100%;\n}\n.view-img-btn-wrap {\n\tposition: absolute;\n\tbottom: 50px;\n\tleft: 0;\n\twidth: 100%;\n\ttext-align: center;\n}\n.templatemo-view-img-btn {\n\tbackground-color: #f4f3f3;\t\n\tborder: none;\n\tborder-radius: 5px;\n\tcolor: #a6a6a6;\n\tpadding: 10px 50px;\n\ttext-transform: uppercase;\n\ttransition: all 0.3s ease;\n}\n.templatemo-view-img-btn:hover {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n\n/* 7. Preferences\n-------------------------------*/\n.has-success .checkbox, .has-success .checkbox-inline, .has-success .control-label, .has-success .help-block, \n.has-success .radio, .has-success .radio-inline, .has-success.checkbox label, .has-success.checkbox-inline label, \n.has-success.radio label, .has-success.radio-inline label {\n\tcolor: #13895F;\n}\n.has-success .form-control { border-color: #13895F; }\n.has-warning .checkbox, .has-warning .checkbox-inline, .has-warning .control-label, .has-warning .help-block, \n.has-warning .radio, .has-warning .radio-inline, .has-warning.checkbox label, .has-warning.checkbox-inline label, \n.has-warning.radio label, .has-warning.radio-inline label {\n\tcolor: #CF922C;\n}\n.has-warning .form-control { border-color: #CF922C; }\n.has-error .checkbox, .has-error .checkbox-inline, .has-error .control-label, .has-error .help-block, \n.has-error .radio, .has-error .radio-inline, .has-error.checkbox label, .has-error.checkbox-inline label, \n.has-error.radio label, .has-error.radio-inline label {\n\tcolor: #D7425C;\n}\n.has-error .form-control { border-color: #D7425C; }\n.templatemo-multi-select {\n\tmin-width: 200px;\n\theight: 100px;\n\toverflow-y: scroll;\t\n}\n\n/* 8. Media Queries\n------------------------------*/\n@media screen and (max-width: 1199px) and (min-width: 991px) {\n\t.templatemo-site-header { margin: 25px; }\n\t.templatemo-sidebar { width: 250px;\t}\n\t.templatemo-search-form { margin: 20px; }\n\tnav li { font-size: 1em; }\n\t.templatemo-left-nav a { padding: 15px; }\n\t.templatemo-top-nav a { padding: 0 30px; }\n}\n\n@media screen and (max-width: 1199px) {\n\t.templatemo-flex-row.flex-content-row { display: block;\t}\n}\n\n@media screen and (max-width: 992px) and (min-width: 768px) {\n\t.templatemo-site-header,\n\t.templatemo-search-form { \n\t\tmargin: 15px; \n\t}\n\t.templatemo-sidebar { width: 200px; } \n\t.templatemo-site-header h1 { font-size: 1.6em; }\n\t.square { \n\t\twidth: 20px; \n\t\theight: 20px;\n\t}\n\t.templatemo-left-nav a.active,\n\t.templatemo-left-nav a:hover {\n\t\tborder-left: 6px solid #13895F;\t\t\n\t}\t\n\t.templatemo-top-nav-container {\tpadding: 17px 30px;\t}\n\t.templatemo-top-nav a { padding: 0 15px; }\n}\n\n@media screen and (max-width: 992px) {\n\tnav li { font-size: 1em; }\n\t.templatemo-left-nav a { padding: 15px 10px; }\t\n\t.templatemo-content-container {\tpadding: 10px; }\n}\n@media only screen and (min-width: 768px) {\n\t.templatemo-left-nav {\tdisplay: block !important; }\n}\n@media screen and (max-width: 767px) {\n\t.templatemo-flex-row { display: block; }\n\t.templatemo-site-header { margin: 20px 15px; }\n\t.profile-photo-container {\tdisplay: none; /* Hide profile photo on mobile view */\t}\n\t.templatemo-search-form { margin: 10px; }\n\t.templatemo-top-nav-container {\tpadding: 10px; }\n\t.templatemo-top-nav a { \n\t\tborder-left: 1px solid #c5c5c5;\n\t\tpadding: 0 7px; \n\t}\n\t.templatemo-top-nav li:last-child a { border-right: 1px solid #c5c5c5; }\n\t.templatemo-content-widget { padding: 15px;\t}\n\n\t/* Left column */\n\t.templatemo-left-nav {\n\t\tdisplay: none;\n\t\tposition: fixed;\n\t\ttop: 10px;\n\t\tright: 50px;\t\t\n\t\theight: 300px;\n\t\toverflow: auto;\n\t\twidth: 200px;\n\t\tz-index: 999;\n\t}\n\t.templatemo-left-nav a.active, \n\t.templatemo-left-nav a:hover {\n\t\tborder-left: 4px solid #13895F;\t\n\t}\n\t.mobile-menu-icon {\n\t\tcursor: pointer;\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\ttop: 10px;\n\t\tright: 10px;\n\t\tz-index: 1000;\n\t}\n\t.mobile-menu-icon:hover .fa { background-color: rgba(19,137,95,0.8); }\n\t.mobile-menu-icon .fa {\n\t\tcolor: #fff;\n\t\tbackground-color: rgba(19,137,95,0.4);\n\t\tfont-size: 1.5em;\n\t\twidth: 40px;\n\t\theight: 40px;\n\t\tpadding-top: 9px;\n\t\tpadding-left: 11px;\n\t}\n}\n\n.error-msg {\n\tcolor: #f30404 !important;\n\tfloat: right !important;\n}\n\n.page-info {\n\tfloat: left !important;\n\tmargin: 30px;\n}\n\n.li-none {\n    display: none !important;\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/address.js",
    "content": "$(document).ready(function (){\n    var addresId;\n    $(\"[name='changeAddr']\").click(function (){\n        $(\"#update-addr\").modal({\n            backdrop:'static'\n        });\n\n        $(\"#name\").val($(this).parents(\"#parent\").find(\"#conname\").text());\n        $(\"#telephone\").val($(this).parents(\"#parent\").find(\"#contel\").text());\n        $(\"#detailaddress\").val($(this).parents(\"#parent\").find(\"#detailaddr\").text());\n         addresId=$(this).parents(\"#parent\").find(\"#table\").attr(\"address-id\");\n\n    });\n\n\n    $(\"#saveAddr\").click(function (){\n        var saveAddr={};\n        saveAddr.addressid=addresId;\n         saveAddr.province=$(\"#provinceUpdate\").val();\n         saveAddr.city=$(\"#cityUpdate\").val();\n         saveAddr.county=$(\"#countyUpdate\").val();\n         saveAddr.detailaddr=$(\"#detailaddress\").val();\n         saveAddr.conname=$(\"#name\").val();\n         saveAddr.contel=$(\"#telephone\").val();\n\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/saveAddr\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:saveAddr,\n            dateType:\"json\",\n            success: function(result){\n                if (result.msg==\"更新失败\")\n                {\n                    swal(result.msg);\n                }\n                else {\n                    $(\"#update-info\").modal('hide');\n                    swal(\"修改成功\", \"\", \"success\");\n                    $(\"button\").click(function (){\n                        location.reload();\n                    });\n                }\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    });\n\n    $(\"[name='deleteAddr']\").click(function (){\n        addresId=$(this).parents(\"#parent\").find(\"#table\").attr(\"address-id\");\n        var address={};\n        address.addressid=addresId;\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/deleteAddr\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:address,\n            dateType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"删除失败\");\n            }\n            });\n    });\n\n    $(\"[name='insertAddr']\").click(function () {\n        $(\"#insert-addr\").modal({\n            backdrop:'static'\n        });\n    });\n\n    $(\"#insertAddr\").click(function (){\n        var insertAddr={};\n        insertAddr.addressid={};\n        insertAddr.userid={};\n       insertAddr.province=$(\"#provinceInsert\").val();\n       insertAddr.city=$(\"#cityInsert\").val();\n        insertAddr.county=$(\"#countyInsert\").val();\n        insertAddr.detailaddr=$(\"#detailaddressInsert\").val();\n        insertAddr.conname=$(\"#nameInsert\").val();\n       insertAddr.contel=$(\"#telephoneInsert\").val();\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/insertAddr\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:insertAddr,\n           dataType:\"json\",\n           success:function (result){\n               swal(result.msg);\n               $(\"button\").click(function (){\n                   location.reload();\n               });\n           },\n           error:function (){\n               alert(\"添加失败\");\n           }\n       });\n\n    });\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/adminchat.js",
    "content": "/*\n/!**\n * Created by 文辉 on 2017/7/26.\n *!/\nvar client;\nvar clientID;\n$(window).on('beforeunload',function(){\n    client=null;\n    window.opener.document.getElementById(\"flag\").value=\"0\";\n});\n$(document).ready(function() {\n    clientID=$('#sendId').text();\n    client = new Messaging.Client('127.0.0.1',61614,clientID);\n    client.onConnectionLost = function(){\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function(message){\n\n        var userid = $(\"#receiveId\").text();\n        clientID = $('#sendId').text();\n        var msgObj=jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to===clientID&&msgObj.from===userid){\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n            /!*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*!/\n        }\n    };\n    //建立连接和订阅\n    client.connect({onSuccess:function(){\n        //订阅topic\n        client.subscribe(\"topic\");\n        // alert(\"连接成功\");\n    }});\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function() {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID=$('#sendId').text();\n            var msg={};\n            msg.from=clientID;\n            msg.to=$('#receiveId').text();\n            msg.body=message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function(request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function(data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n\n        }\n    });\n\n    //回车\n    $(document).keypress(function(e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function() {\n        $('.a-card').css(\"background\",\"#FFFFFF\")\n        $(this).css(\"background\",\"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function(request) {\n                alert(\"保存消息失败\");\n            },\n            success: function(result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n\n    $('.chat-list').hover(function() {\n        $(this).css(\"overflow-y\",\"auto\");\n    }, function() {\n        $(this).css(\"overflow-y\",\"hidden\");\n    });\n\n});\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index,item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n*/\n\n\nvar client;\nvar clientID;\n$(window).on('beforeunload', function () {\n    client = null;\n    window.opener.document.getElementById(\"flag\").value = \"0\";\n});\n$(document).ready(function () {\n\n    console.log(getChatList(2));\n    reGetChatUser($(\"#receiveId\").text());\n\n    clientID = $('#sendId').text();\n    client = new Messaging.Client('127.0.0.1', 61614, clientID);\n    client.onConnectionLost = function () {\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function (message) {\n        clientID = $('#sendId').text();\n        var userid = $(\"#receiveId\").text();\n        var msgObj = jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to === clientID && msgObj.from === userid) {\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n            /*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*/\n        } else if (msgObj.to === clientID && !getChatList(msgObj.from)) {\n            //重新获取聊天列表\n            reGetChatUser(msgObj.from);\n            // reGetChatUser(null);\n            /* var chatlistitem = '<a class=\"a-card\" data-userid=\"' + msgObj.from + '\"> <div class=\"card\">' + msgObj.from + '</div> </a>';\n             $('.a-far').prepend(chatlistitem);*/\n        }\n    };\n    //建立连接和订阅\n    client.connect({\n        onSuccess: function () {\n            //订阅topic\n            client.subscribe(\"topic\");\n            // alert(\"连接成功\");\n        }\n    });\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function () {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID = $('#sendId').text();\n            var msg = {};\n            msg.from = clientID;\n            msg.to = $('#receiveId').text();\n            msg.body = message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function (request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function (data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n            var receive = $(\"#receiveId\").text();\n            /*$.post(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             });\n             receive();\n             refreshList();*/\n            /*$.get(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             },\n             function(data,status){\n             alert(\"数据: \\n\" + data + \"\\n状态: \" + status);\n             });*/\n        }\n    });\n\n    //回车\n    $(document).keypress(function (e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function () {\n        $('.a-card').css(\"background\", \"#FFFFFF\")\n        $(this).css(\"background\", \"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function (request) {\n                alert(\"保存消息失败\");\n            },\n            success: function (result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n    /*function hitList(){\n     $('.list-item').css(\"background\",\"#FAFAFA\");\n     $(this).css(\"background\",\"#EBEBEC\");\n     var name = $(this).children(\"#user-name\").text();\n     var number = $(this).children(\"#user-no\").text();\n     $(\"#receive\").text(name);\n     $(\"#receiveId\").text(number);\n\n     }*/\n\n    $('.chat-list').hover(function () {\n        $(this).css(\"overflow-y\", \"auto\");\n    }, function () {\n        $(this).css(\"overflow-y\", \"hidden\");\n    });\n    //refreshList();\n\n});\n\nfunction userListClick() {\n\n    //发异步请求查聊天消息\n    $.ajax({\n        url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            senduser: $(\"#sendId\").text(),\n            receiveuser: $(\"#receiveId\").text(),\n        },\n        error: function (request) {\n            alert(\"保存消息失败\");\n        },\n        success: function (result) {\n            $('.chat-content-body').empty();\n            showMessage(result.info.message);\n            // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n        }\n    });\n}\n\n/*function receive(){\n var sendUser = $('#receiveId').text();\n $.post(\"servlet/ReceiveServlet\", {\n sendId: sendUser,\n },\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n $(\".chat-content-body\").html('');\n for (var i = 0; i < data.length; i++) {\n showMessage(data[i].User1,data[i].MsgContent);\n }\n },\"json\");\n }*/\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index, item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n//获取所有聊天列表\nfunction getChatList(id) {\n    var chatList = [];\n    $('.a-far>a').each(function () {\n        chatList.push($(this).attr(\"data-userid\"));\n    });\n    console.log(chatList);\n    for (var i = 0; i < chatList.length; i++) {\n        if (chatList[i] == id) {\n            return true;\n        }\n    }\n    return false;\n\n    /*$('.a-far').children().each(function(index,item){\n     alert(item.attr(\"data-userid\"));\n     })*/\n\n}\n\n//重新获取列表\nfunction reGetChatUser(sendto) {\n    $.ajax({\n        url: \"/shop/adminchat/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            sendto: sendto\n        },\n        error: function (request) {\n            alert(result.msg);\n        },\n        success: function (result) {\n            $('.a-far').empty();\n            showChatList(result.info.userlist);\n        }\n    });\n}\n\nfunction showChatList(userlist) {\n    $.each(userlist, function (index, item) {\n        var chatlistitemA = $(\"<a></a>\").addClass(\"a-card\").attr(\"data-userid\", item.userid).attr(\"data-username\", item.username);\n        var chatlistitem = chatlistitemA.addClass(\"card\").append(item.username);\n        chatlistitemA.click(function () {\n            $('.a-card').css(\"background\", \"#FFFFFF\")\n            $(this).css(\"background\", \"#F8F8F8\");\n            var userid = $(this).attr(\"data-userid\");\n            // var username = $(this).children(\".card\").text();\n            var username = $(this).attr(\"data-username\");\n            $(\"#receive\").text(username);\n            $(\"#receiveId\").text(userid);\n            userListClick();\n        });\n\n        /* <div class=\"card\">' + item.username + '</div>\n         *!/*/\n        $('.a-far').prepend(chatlistitem);\n    });\n}\n\n\n/*\n function refreshList() {\n $.post(\"servlet/RefreshServlet\",\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n //$(\".chat-list\").html('');\n for (var i = 0; i < data.length; i++) {\n // showList(data[i].UserId,data[i].Name);\n $('#list-item'+i).children(\"#user-name\").text(data[i].Name);\n $('#list-item'+i).children(\"#user-no\").text(data[i].UserId);\n $('#list-item'+i).css(\"display\",\"block\");\n }\n },\"json\");\n }\n\n function showList(id,name) {\n var item = '<div class=\"list-item\"><h3 id=\"user-name\">'+name+'</h3><span id=\"user-no\">'+id+'</span></div>';\n $('.chat-list').append(item);\n }*/\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/categery.js",
    "content": "$(document).ready(function (){\n    var cateId={};\n\n   $(\"[name='changCate']\") .click(function (){\n       $(\"#update-cate\").modal({\n           backdrop:'static'\n       });\n       $(\"#categoryName\").val($(this).parent().prev().children().text());\n       cateId=$(this).parent().prev().children().attr(\"cateId\");\n   });\n\n   $(\"#saveCatename\").click(function (){\n       var category={};\n       category.cateid=cateId;\n       category.catename=$(\"#categoryName\").val();\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/admin/goods/saveCate\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:category,\n           dataType:\"json\",\n           success:function (result){\n               if (result.msg==\"名字已经存在\")\n               {\n                   swal(result.msg);\n               }\n               else {\n                   swal(result.msg);\n                   $(\"button\").click(function (){\n                       location.reload();\n                   });\n               }\n           },\n           error:function (){\n               alert(\"更新失败\");\n           }\n       });\n   })\n    $(\"[name='deleteCate']\").click(function (){\n        var category={};\n        category.cateid=$(this).parent().prev().prev().children().attr(\"cateId\");\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/admin/goods/deleteCate\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:category,\n            dataType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    })\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/chat.js",
    "content": "$(document).ready(function(){\n\n\t$(\"#send-message\").click(function() {\n\t\tvar message = $(\"#input-message\").val();\n\t\tif (message !== '') {\n\t\t\t$(\"#input-message\").val('');\n\t\t\tvar element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + message + '</div> </div> </div>';z\n\t\t\tvar element_float = '<div class=\"clear-float\"></div>';\n\t\t\t$(\".chat-content-body\").append(element, element_float);\n\t\t\tsend(message, '123456');\n\t\t\t//始终保持滚动条滚动到最下方\n\t\t\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n\t\t}\n\t});\n\n\t//回车\n\t$(document).keypress(function(e) {\n\t\tif (e.which == 13) {\n\t\t\te.preventDefault();\n\t\t\tjQuery(\"#send-message\").click();\n\t\t}\n\t});\n\n\n\t/*var request = {\n\t    \"perception\": {\n\t        \"inputText\": {\n\t            \"text\": \"附近的酒店\"\n\t        },\n\t        \"selfInfo\": {\n\t            \"location\": {\n\t                \"city\": \"北京\",\n\t                \"latitude\": \"39.45492\",\n\t                \"longitude\": \"119.239293\",\n\t                \"nearest_poi_name\": \"上地环岛南\",\n\t                \"province\": \"北京\",\n\t                \"street\": \"信息路\"\n\t            },\n\t        }\n\t    },\n\t    \"userInfo\": {\n\t        \"apiKey\": \"0a1bfc7154e94d009460be836523c1d1\",\n\t        \"userId\": \"user\"\n\t    }\n\t};*/\n\n\n});\n\nfunction send(data,userid){\n\tvar request = {\n\t\t\"key\": \"0a1bfc7154e94d009460be836523c1d1\",\n\t\t\"info\": data,\n\t\t\"loc\": \"沈阳市浑南新区\",\n\t\t\"userid\": userid,\n\t};\n\n\t$.post('http://www.tuling123.com/openapi/api', request, \n\t\tfunction(data, status){\n\t\t\t// alert(data.code);\n\t\t\tif(data.code === 100000){\n\t\t\t\tshowMessage('123456', data.text);\n\t\t\t} else if(data.code === 200000) {\n\t\t\t\t//链接\n\t\t\t\tshowUrl(data.text, data.url);\n\t\t\t} else if(data.code === 302000) {\n\t\t\t\t//新闻\n\t\t\t\t// alert(data.list.length);\n\t\t\t\tfor(var i = 0; i<data.list.length; i++) {\n\t\t\t\t\tshowNews(data.list[i].article, data.list[i].source, data.list[i].detailurl);\n\t\t\t\t}\n\t\t\t} else if(data.code === 308000) {\n\t\t\t\t//菜谱,未完。。\n\t\t\t\tshowUrl(data.text, data.url);\n\t\t\t} else {\n\t\t\t\tshowMessage('123456', data.text);\n\t\t\t}\n\t\t\t\n\t\t},\"json\");\n}\n\nfunction showMessage(receiveName, message) {\n\t// $(\"#input-message\").val('');\n\tvar receiveId = $('#receiveId').text();\n\tvar element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + message + '</div> </div> </div>';\n\tvar element_float = '<div class=\"clear-float\"></div>';\n\t$(\".chat-content-body\").append(element, element_float);\n\n\t//始终保持滚动条滚动到最下方\n\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\nfunction showUrl(message, url) {\n\tvar element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + message + '&nbsp' + '<a href=\"'+ url +'\">点击查看</a>' +'</div> </div> </div>';\n\tvar element_float = '<div class=\"clear-float\"></div>';\n\t$(\".chat-content-body\").append(element, element_float);\n\n\t//始终保持滚动条滚动到最下方\n\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\nfunction showNews(article, source, detailurl) {\n\tvar element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + article + '<br />来源：'+ source + '<br /><a href=\"'+ detailurl +'\">查看详情</a>' +'</div> </div> </div>';\n\tvar element_float = '<div class=\"clear-float\"></div>';\n\t$(\".chat-content-body\").append(element, element_float);\n\n\t//始终保持滚动条滚动到最下方\n\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/detail.js",
    "content": "/*\n  本网站效果由昆明天度网络IRIS原创制作，未经同意不得转载\n  商城用商品展示放大镜效果\n*/\njQuery.ljsGlasses = {\n    pcGlasses:function(_obj){\n\t\tvar _box = $(\"#\"+_obj.boxid);\n\t\tvar _sum = $(\"#\"+_obj.sumid);\n\t\tvar _last,_next;\n\t\tvar _imgarr = _box.find(\"img\");\n\t\tvar _length = _imgarr.length;\n\t\tvar _index = 0;\n\t\tvar _arr = new Array();\n\t\t_sum.append(\"<p style='position:absolute;left:0;top:0;'></p>\");\n\t\tvar _sumbox = _sum.find(\"p\");\n\t\t\n\t\tfor(var i=0;i<_length;i++){\n\t\t\t_arr[i] = new Array();\n\t\t\t_arr[i][0] = _imgarr.eq(i).attr(\"src\");\n\t\t\t_arr[i][1] = _imgarr.eq(i).attr(\"width\");\n\t\t\t_arr[i][2] = _imgarr.eq(i).attr(\"height\");\n\t\t\tvar _scale = _arr[i][1]/_arr[i][2];\n\t\t\tif(_scale == 1){\n\t\t\t\t_arr[i][3] = _obj.boxw;//width\n\t\t\t\t_arr[i][4] = _obj.boxh;//height\n\t\t\t\t_arr[i][5] = 0;//top\n\t\t\t\t_arr[i][6] = 0;//left\n\t\t\t\t_arr[i][7] = _obj.boxw/2;\n\t\t\t\t_arr[i][8] = _obj.boxw*2;//width\n\t\t\t\t_arr[i][9] = _obj.boxh*2;//height\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' width='\"+_obj.sumw+\"' height='\"+_obj.sumh+\"' /></span>\");\n\t\t\t\t}\n\t\t\tif(_scale > 1){\n\t\t\t\t_arr[i][3] = _obj.boxw;//width\n\t\t\t\t_arr[i][4] = _obj.boxw/_scale;\n\t\t\t\t_arr[i][5] = (_obj.boxh-_arr[i][4])/2;\n\t\t\t\t_arr[i][6] = 0;//left\n\t\t\t\t_arr[i][7] = _arr[i][4]/2;\n\t\t\t\t_arr[i][8] = _obj.boxh*2*_scale;//width\n\t\t\t\t_arr[i][9] = _obj.boxh*2;//height\n\t\t\t\tvar _place = _obj.sumh - (_obj.sumw/_scale);\n\t\t\t\t_place = _place/2;\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' width='\"+_obj.sumw+\"' style='top:\"+_place+\"px;' /></span>\");\n\t\t\t\t}\n\t\t\tif(_scale < 1){\n\t\t\t\t_arr[i][3] = _obj.boxh*_scale;//width\n\t\t\t\t_arr[i][4] = _obj.boxh;//height\n\t\t\t\t_arr[i][5] = 0;//top\n\t\t\t\t_arr[i][6] = (_obj.boxw-_arr[i][3])/2;\n\t\t\t\t_arr[i][7] = _arr[i][3]/2;\n\t\t\t\t_arr[i][8] = _obj.boxw*2;//width\n\t\t\t\t_arr[i][9] = _obj.boxw*2/_scale;\n\t\t\t\tvar _place = _obj.sumw - (_obj.sumh*_scale);\n\t\t\t\t_place = _place/2;\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' height='\"+_obj.sumh+\"' style='left:\"+_place+\"px;' /></span>\");\n\t\t\t\t}\n\t\t}\n\t\t_imgarr.remove();\n\t\t\n\t\t_sum.append(\"<div style='clear:both;width:100%;'></div>\");\n\t\tvar _sumarr = _sum.find(\"span\");\n\t\tvar _sumimg = _sum.find(\"img\");\n\t\t_sumarr.eq(_index).addClass(_obj.sumsel);\n\t\tvar _border = _obj.sumborder*2 + _obj.sumh;\n\t\tvar _sumwidth = (_border+_obj.sumi)*_obj.sums;\n\t\tvar _sumboxwidth = (_border+_obj.sumi)*_length;\n\t\t_sum.css({\n\t\t\t\"overflow\":\"hidden\",\n\t\t\t\"height\":_border+\"px\",\n\t\t\t\"width\":_sumwidth+\"px\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t_sumbox.css({\n\t\t\t\"width\":_sumboxwidth+\"px\"\n\t\t\t});\n\t\t_sumarr.css({\n\t\t\t\"float\":\"left\",\n\t\t\t\"margin-left\":_obj.sumi+\"px\",\n\t\t\t\"width\":_obj.sumw+\"px\",\n\t\t\t\"height\":_obj.sumh+\"px\",\n\t\t\t\"overflow\":\"hidden\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t_sumimg.css({\n\t\t\t\"max-width\":\"100%\",\n\t\t\t\"max-height\":\"100%\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t\n\t\t_box.append(\"<div style='position:relative;'><b style='display:block;'><img style='display:block;' src='' /></b><span style='position:absolute;left:0;top:0;display:none;z-index:5;'></span></div><p style='position:absolute;overflow:hidden;top:0;display:none;'><img style='max-width:none;max-height:none;position:relative;left:0;top:0;' src='' /></p>\");\n\t\tvar _glass = _box.find(\"span\");\n\t\tvar _boximg = _box.find(\"b img\");\n\t\tvar _imgout = _box.find(\"div\");\n\t\tvar _showbox = _box.find(\"p\");\n\t\tvar _showimg = _box.find(\"p img\");\n\n\t\t_box.css({\n\t\t\t\"width\":_obj.boxw+\"px\",\n\t\t\t\"height\":_obj.boxh+\"px\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\tvar _showboxleft = _obj.boxw + 10;\n\t\t_showbox.css({\n\t\t\t\"width\":_obj.boxw+\"px\",\n\t\t\t\"height\":_obj.boxh+\"px\",\n\t\t\t\"left\":_showboxleft+\"px\"\n\t\t\t});\n\t\t\n\t\tvar imgPlaces = function(){\n\t\t\t_showimg.attr(\"src\",_arr[_index][0]);\n\t\t\t_boximg.attr(\"src\",_arr[_index][0]);\n\t\t\t_boximg.css({\n\t\t\t    \"width\":_arr[_index][3]+\"px\",\n\t\t\t    \"height\":_arr[_index][4]+\"px\"\n\t\t\t});\n\t\t\t_imgout.css({\n\t\t\t\t\"width\":_arr[_index][3]+\"px\",\n\t\t\t    \"height\":_arr[_index][4]+\"px\",\n\t\t\t    \"top\":_arr[_index][5]+\"px\",\n\t\t\t    \"left\":_arr[_index][6]+\"px\",\n\t\t\t    \"position\":\"relative\"\n\t\t\t});\n\t\t\t_glass.css({\n\t\t\t    \"width\":_arr[_index][7]+\"px\",\n\t\t\t    \"height\":_arr[_index][7]+\"px\"\n\t\t\t});\n\t\t\t_showimg.css({\n\t\t\t\t\"width\":_arr[_index][8]+\"px\",\n\t\t\t    \"height\":_arr[_index][9]+\"px\"\n\t\t\t});\n\t\t\t\n\t\t};\n\t\timgPlaces();\n\t\t\n\t\t_imgout.mousemove(function(e){\n\t\t\tvar _gl_w = _glass.width()/2;\n\t\t\tvar _maxX = _imgout.width() - _gl_w;\n\t\t\tvar _maxY = _imgout.height() - _gl_w;\n\t\t\tvar _moveX = 0,_moveY = 0;\n\t\t\tvar _nowX = e.pageX - _imgout.offset().left;\n\t\t    var _nowY = e.pageY - _imgout.offset().top;\n\t\t\tvar _moveX = _nowX-_gl_w,_moveY = _nowY-_gl_w;\n\t\t\t\n\t\t\tif(_nowX <= _gl_w){ _moveX = 0; }\n\t\t\tif(_nowX >= _maxX){ _moveX = _maxX-_gl_w; }\n\t\t\tif(_nowY <= _gl_w){ _moveY = 0;}\n\t\t\tif(_nowY >= _maxY){ _moveY = _maxY-_gl_w;}\n\t\t\t_glass.css({\"left\":_moveX+\"px\",\"top\":_moveY+\"px\"});\n\n\t\t\tvar _imgX = -_moveX*_showbox.width()/_glass.width();\n\t\t\tvar _imgY = -_moveY*_showbox.width()/_glass.width();\n\t\t\t_showimg.css({\"left\":_imgX+\"px\",\"top\":_imgY+\"px\"});\n\t\n\t\t});//mouse END\n\t\t\n\t\t_imgout.mouseenter(function(){\n\t\t\t_glass.css(\"display\",\"block\");\n\t\t\t_showbox.css(\"display\",\"block\");\n\t\t\t});\n\t\t_imgout.mouseleave(function(){\n\t\t\t_glass.css(\"display\",\"none\");\n\t\t\t_showbox.css(\"display\",\"none\");\n\t\t\t});\n\t\t\n\t\t//列表部分\n\t\tvar _nextbtn = $(\"#\"+_obj.nextid);\n\t\tvar _lastbtn = $(\"#\"+_obj.lastid);\n\t\tvar _moveindex = 0;//索引移动\n\t\t\n\t\tvar _sumListMove = function(){\n\t\t\tvar _leftmove = -_moveindex*(_border+_obj.sumi);\n\t\t\tif(_sumbox.is(\":animated\")){_sumbox.stop(true,true);}\n\t\t\t_sumbox.animate({left:_leftmove+\"px\"},300);\n\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\timgPlaces();\n\t\t};//fun END\n\t\t\n\t\tif(_length <= _obj.sums){\n\t\t\tvar _place = (_obj.sums-_length)*_border/2;\n\t\t\t_sumbox.css(\"left\",_place+\"px\");\n\t\t\t_nextbtn.click(function(){\n\t\t\t\t_index++;\n\t\t\t\tif(_index >= _length){ _index=_length-1;}\n\t\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\t    imgPlaces();\n\t\t\t});\n\t\t\t_lastbtn.click(function(){\n\t\t\t\t_index--;\n\t\t\t\tif(_index <= 0){ _index=0;}\n\t\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\t    imgPlaces();\n\t\t\t});\n\t\t}else{\n\t\t\tvar _maxNum = _length-_obj.sums;\n\t\t\t_nextbtn.click(function(){\n\t\t\t   _moveindex++;\n\t\t\t   if(_moveindex >= _maxNum){ _moveindex=_maxNum; }\n\t\t\t   if(_index <= _moveindex){ _index=_moveindex;}\n\t\t\t   _sumListMove();\n\t\t    });\n\t\t\t_lastbtn.click(function(){\n\t\t\t\t_moveindex--;\n\t\t\t\tif(_moveindex <= 0){ _moveindex=0;}\n\t\t\t\tif(_index >= _moveindex+_obj.sums){ _index=_moveindex+_obj.sums-1;}\n\t\t\t\t_sumListMove();\n\t\t\t});\n\t\t}//if END\n\n\t\t_sumarr.hover(function(){\n\t\t\t_index = $(this).index();\n\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\timgPlaces();\n\t\t});\n\t\n  }//pcGlasses END\n}//ljsGlasses END"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/distpicker.js",
    "content": "/*!\n * Distpicker v2.0.0\n * https://github.com/fengyuanchen/distpicker\n *\n * Copyright (c) 2014-2017 Fengyuan Chen\n * Released under the MIT license\n *\n * Date: 2017-06-01T14:17:32.614Z\n */\n\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n  (factory(global.jQuery));\n}(this, (function ($) { 'use strict';\n\n$ = 'default' in $ ? $['default'] : $;\n\nvar DEFAULTS = {\n  // Selects the districts automatically.\n  // 0 -> Disable autoselect\n  // 1 -> Autoselect province only\n  // 2 -> Autoselect province and city only\n  // 3 -> Autoselect all (province, city and district)\n  autoselect: 0,\n\n  // Show placeholder.\n  placeholder: true,\n\n  // Select value. Options: 'name' and 'code'\n  valueType: 'name',\n\n  // Defines the initial value of province.\n  province: '—— 省 ——',\n\n  // Defines the initial value of city.\n  city: '—— 市 ——',\n\n  // Defines the initial value of district.\n  district: '—— 区 ——'\n};\n\nvar DISTRICTS = {\n  100000: {\n    110000: '北京市',\n    120000: '天津市',\n    130000: '河北省',\n    140000: '山西省',\n    150000: '内蒙古自治区',\n    210000: '辽宁省',\n    220000: '吉林省',\n    230000: '黑龙江省',\n    310000: '上海市',\n    320000: '江苏省',\n    330000: '浙江省',\n    340000: '安徽省',\n    350000: '福建省',\n    360000: '江西省',\n    370000: '山东省',\n    410000: '河南省',\n    420000: '湖北省',\n    430000: '湖南省',\n    440000: '广东省',\n    450000: '广西壮族自治区',\n    460000: '海南省',\n    500000: '重庆市',\n    510000: '四川省',\n    520000: '贵州省',\n    530000: '云南省',\n    540000: '西藏自治区',\n    610000: '陕西省',\n    620000: '甘肃省',\n    630000: '青海省',\n    640000: '宁夏回族自治区',\n    650000: '新疆维吾尔自治区',\n    710000: '台湾省',\n    810000: '香港特别行政区',\n    820000: '澳门特别行政区'\n  },\n  110000: {\n    110100: '北京市市辖区'\n  },\n  110100: {\n    110101: '东城区',\n    110102: '西城区',\n    110105: '朝阳区',\n    110106: '丰台区',\n    110107: '石景山区',\n    110108: '海淀区',\n    110109: '门头沟区',\n    110111: '房山区',\n    110112: '通州区',\n    110113: '顺义区',\n    110114: '昌平区',\n    110115: '大兴区',\n    110116: '怀柔区',\n    110117: '平谷区',\n    110118: '密云区',\n    110119: '延庆区'\n  },\n  120000: {\n    120100: '天津市市辖区'\n  },\n  120100: {\n    120101: '和平区',\n    120102: '河东区',\n    120103: '河西区',\n    120104: '南开区',\n    120105: '河北区',\n    120106: '红桥区',\n    120110: '东丽区',\n    120111: '西青区',\n    120112: '津南区',\n    120113: '北辰区',\n    120114: '武清区',\n    120115: '宝坻区',\n    120116: '滨海新区',\n    120117: '宁河区',\n    120118: '静海区',\n    120119: '蓟州区'\n  },\n  130000: {\n    130100: '石家庄市',\n    130200: '唐山市',\n    130300: '秦皇岛市',\n    130400: '邯郸市',\n    130500: '邢台市',\n    130600: '保定市',\n    130700: '张家口市',\n    130800: '承德市',\n    130900: '沧州市',\n    131000: '廊坊市',\n    131100: '衡水市'\n  },\n  130100: {\n    130102: '长安区',\n    130104: '桥西区',\n    130105: '新华区',\n    130107: '井陉矿区',\n    130108: '裕华区',\n    130109: '藁城区',\n    130110: '鹿泉区',\n    130111: '栾城区',\n    130121: '井陉县',\n    130123: '正定县',\n    130125: '行唐县',\n    130126: '灵寿县',\n    130127: '高邑县',\n    130128: '深泽县',\n    130129: '赞皇县',\n    130130: '无极县',\n    130131: '平山县',\n    130132: '元氏县',\n    130133: '赵县',\n    130181: '辛集市',\n    130183: '晋州市',\n    130184: '新乐市'\n  },\n  130200: {\n    130202: '路南区',\n    130203: '路北区',\n    130204: '古冶区',\n    130205: '开平区',\n    130207: '丰南区',\n    130208: '丰润区',\n    130209: '曹妃甸区',\n    130223: '滦县',\n    130224: '滦南县',\n    130225: '乐亭县',\n    130227: '迁西县',\n    130229: '玉田县',\n    130281: '遵化市',\n    130283: '迁安市'\n  },\n  130300: {\n    130302: '海港区',\n    130303: '山海关区',\n    130304: '北戴河区',\n    130306: '抚宁区',\n    130321: '青龙满族自治县',\n    130322: '昌黎县',\n    130324: '卢龙县'\n  },\n  130400: {\n    130402: '邯山区',\n    130403: '丛台区',\n    130404: '复兴区',\n    130406: '峰峰矿区',\n    130423: '临漳县',\n    130424: '成安县',\n    130425: '大名县',\n    130426: '涉县',\n    130427: '磁县',\n    130428: '肥乡区',\n    130429: '永年区',\n    130430: '邱县',\n    130431: '鸡泽县',\n    130432: '广平县',\n    130433: '馆陶县',\n    130434: '魏县',\n    130435: '曲周县',\n    130481: '武安市'\n  },\n  130500: {\n    130502: '桥东区',\n    130503: '桥西区',\n    130521: '邢台县',\n    130522: '临城县',\n    130523: '内丘县',\n    130524: '柏乡县',\n    130525: '隆尧县',\n    130526: '任县',\n    130527: '南和县',\n    130528: '宁晋县',\n    130529: '巨鹿县',\n    130530: '新河县',\n    130531: '广宗县',\n    130532: '平乡县',\n    130533: '威县',\n    130534: '清河县',\n    130535: '临西县',\n    130581: '南宫市',\n    130582: '沙河市'\n  },\n  130600: {\n    130602: '竞秀区',\n    130606: '莲池区',\n    130607: '满城区',\n    130608: '清苑区',\n    130609: '徐水区',\n    130623: '涞水县',\n    130624: '阜平县',\n    130626: '定兴县',\n    130627: '唐县',\n    130628: '高阳县',\n    130629: '容城县',\n    130630: '涞源县',\n    130631: '望都县',\n    130632: '安新县',\n    130633: '易县',\n    130634: '曲阳县',\n    130635: '蠡县',\n    130636: '顺平县',\n    130637: '博野县',\n    130638: '雄县',\n    130681: '涿州市',\n    130682: '定州市',\n    130683: '安国市',\n    130684: '高碑店市'\n  },\n  130700: {\n    130702: '桥东区',\n    130703: '桥西区',\n    130705: '宣化区',\n    130706: '下花园区',\n    130708: '万全区',\n    130709: '崇礼区',\n    130722: '张北县',\n    130723: '康保县',\n    130724: '沽源县',\n    130725: '尚义县',\n    130726: '蔚县',\n    130727: '阳原县',\n    130728: '怀安县',\n    130730: '怀来县',\n    130731: '涿鹿县',\n    130732: '赤城县'\n  },\n  130800: {\n    130802: '双桥区',\n    130803: '双滦区',\n    130804: '鹰手营子矿区',\n    130821: '承德县',\n    130822: '兴隆县',\n    130823: '平泉县',\n    130824: '滦平县',\n    130825: '隆化县',\n    130826: '丰宁满族自治县',\n    130827: '宽城满族自治县',\n    130828: '围场满族蒙古族自治县'\n  },\n  130900: {\n    130902: '新华区',\n    130903: '运河区',\n    130921: '沧县',\n    130922: '青县',\n    130923: '东光县',\n    130924: '海兴县',\n    130925: '盐山县',\n    130926: '肃宁县',\n    130927: '南皮县',\n    130928: '吴桥县',\n    130929: '献县',\n    130930: '孟村回族自治县',\n    130981: '泊头市',\n    130982: '任丘市',\n    130983: '黄骅市',\n    130984: '河间市'\n  },\n  131000: {\n    131002: '安次区',\n    131003: '广阳区',\n    131022: '固安县',\n    131023: '永清县',\n    131024: '香河县',\n    131025: '大城县',\n    131026: '文安县',\n    131028: '大厂回族自治县',\n    131081: '霸州市',\n    131082: '三河市'\n  },\n  131100: {\n    131102: '桃城区',\n    131103: '冀州区',\n    131121: '枣强县',\n    131122: '武邑县',\n    131123: '武强县',\n    131124: '饶阳县',\n    131125: '安平县',\n    131126: '故城县',\n    131127: '景县',\n    131128: '阜城县',\n    131182: '深州市'\n  },\n  140000: {\n    140100: '太原市',\n    140200: '大同市',\n    140300: '阳泉市',\n    140400: '长治市',\n    140500: '晋城市',\n    140600: '朔州市',\n    140700: '晋中市',\n    140800: '运城市',\n    140900: '忻州市',\n    141000: '临汾市',\n    141100: '吕梁市'\n  },\n  140100: {\n    140105: '小店区',\n    140106: '迎泽区',\n    140107: '杏花岭区',\n    140108: '尖草坪区',\n    140109: '万柏林区',\n    140110: '晋源区',\n    140121: '清徐县',\n    140122: '阳曲县',\n    140123: '娄烦县',\n    140181: '古交市'\n  },\n  140200: {\n    140202: '城区',\n    140203: '矿区',\n    140211: '南郊区',\n    140212: '新荣区',\n    140221: '阳高县',\n    140222: '天镇县',\n    140223: '广灵县',\n    140224: '灵丘县',\n    140225: '浑源县',\n    140226: '左云县',\n    140227: '大同县'\n  },\n  140300: {\n    140302: '城区',\n    140303: '矿区',\n    140311: '郊区',\n    140321: '平定县',\n    140322: '盂县'\n  },\n  140400: {\n    140402: '城区',\n    140411: '郊区',\n    140421: '长治县',\n    140423: '襄垣县',\n    140424: '屯留县',\n    140425: '平顺县',\n    140426: '黎城县',\n    140427: '壶关县',\n    140428: '长子县',\n    140429: '武乡县',\n    140430: '沁县',\n    140431: '沁源县',\n    140481: '潞城市'\n  },\n  140500: {\n    140502: '城区',\n    140521: '沁水县',\n    140522: '阳城县',\n    140524: '陵川县',\n    140525: '泽州县',\n    140581: '高平市'\n  },\n  140600: {\n    140602: '朔城区',\n    140603: '平鲁区',\n    140621: '山阴县',\n    140622: '应县',\n    140623: '右玉县',\n    140624: '怀仁县'\n  },\n  140700: {\n    140702: '榆次区',\n    140721: '榆社县',\n    140722: '左权县',\n    140723: '和顺县',\n    140724: '昔阳县',\n    140725: '寿阳县',\n    140726: '太谷县',\n    140727: '祁县',\n    140728: '平遥县',\n    140729: '灵石县',\n    140781: '介休市'\n  },\n  140800: {\n    140802: '盐湖区',\n    140821: '临猗县',\n    140822: '万荣县',\n    140823: '闻喜县',\n    140824: '稷山县',\n    140825: '新绛县',\n    140826: '绛县',\n    140827: '垣曲县',\n    140828: '夏县',\n    140829: '平陆县',\n    140830: '芮城县',\n    140881: '永济市',\n    140882: '河津市'\n  },\n  140900: {\n    140902: '忻府区',\n    140921: '定襄县',\n    140922: '五台县',\n    140923: '代县',\n    140924: '繁峙县',\n    140925: '宁武县',\n    140926: '静乐县',\n    140927: '神池县',\n    140928: '五寨县',\n    140929: '岢岚县',\n    140930: '河曲县',\n    140931: '保德县',\n    140932: '偏关县',\n    140981: '原平市'\n  },\n  141000: {\n    141002: '尧都区',\n    141021: '曲沃县',\n    141022: '翼城县',\n    141023: '襄汾县',\n    141024: '洪洞县',\n    141025: '古县',\n    141026: '安泽县',\n    141027: '浮山县',\n    141028: '吉县',\n    141029: '乡宁县',\n    141030: '大宁县',\n    141031: '隰县',\n    141032: '永和县',\n    141033: '蒲县',\n    141034: '汾西县',\n    141081: '侯马市',\n    141082: '霍州市'\n  },\n  141100: {\n    141102: '离石区',\n    141121: '文水县',\n    141122: '交城县',\n    141123: '兴县',\n    141124: '临县',\n    141125: '柳林县',\n    141126: '石楼县',\n    141127: '岚县',\n    141128: '方山县',\n    141129: '中阳县',\n    141130: '交口县',\n    141181: '孝义市',\n    141182: '汾阳市'\n  },\n  150000: {\n    150100: '呼和浩特市',\n    150200: '包头市',\n    150300: '乌海市',\n    150400: '赤峰市',\n    150500: '通辽市',\n    150600: '鄂尔多斯市',\n    150700: '呼伦贝尔市',\n    150800: '巴彦淖尔市',\n    150900: '乌兰察布市',\n    152200: '兴安盟',\n    152500: '锡林郭勒盟',\n    152900: '阿拉善盟'\n  },\n  150100: {\n    150102: '新城区',\n    150103: '回民区',\n    150104: '玉泉区',\n    150105: '赛罕区',\n    150121: '土默特左旗',\n    150122: '托克托县',\n    150123: '和林格尔县',\n    150124: '清水河县',\n    150125: '武川县'\n  },\n  150200: {\n    150202: '东河区',\n    150203: '昆都仑区',\n    150204: '青山区',\n    150205: '石拐区',\n    150206: '白云鄂博矿区',\n    150207: '九原区',\n    150221: '土默特右旗',\n    150222: '固阳县',\n    150223: '达尔罕茂明安联合旗'\n  },\n  150300: {\n    150302: '海勃湾区',\n    150303: '海南区',\n    150304: '乌达区'\n  },\n  150400: {\n    150402: '红山区',\n    150403: '元宝山区',\n    150404: '松山区',\n    150421: '阿鲁科尔沁旗',\n    150422: '巴林左旗',\n    150423: '巴林右旗',\n    150424: '林西县',\n    150425: '克什克腾旗',\n    150426: '翁牛特旗',\n    150428: '喀喇沁旗',\n    150429: '宁城县',\n    150430: '敖汉旗'\n  },\n  150500: {\n    150502: '科尔沁区',\n    150521: '科尔沁左翼中旗',\n    150522: '科尔沁左翼后旗',\n    150523: '开鲁县',\n    150524: '库伦旗',\n    150525: '奈曼旗',\n    150526: '扎鲁特旗',\n    150581: '霍林郭勒市'\n  },\n  150600: {\n    150602: '东胜区',\n    150603: '康巴什区',\n    150621: '达拉特旗',\n    150622: '准格尔旗',\n    150623: '鄂托克前旗',\n    150624: '鄂托克旗',\n    150625: '杭锦旗',\n    150626: '乌审旗',\n    150627: '伊金霍洛旗'\n  },\n  150700: {\n    150702: '海拉尔区',\n    150703: '扎赉诺尔区',\n    150721: '阿荣旗',\n    150722: '莫力达瓦达斡尔族自治旗',\n    150723: '鄂伦春自治旗',\n    150724: '鄂温克族自治旗',\n    150725: '陈巴尔虎旗',\n    150726: '新巴尔虎左旗',\n    150727: '新巴尔虎右旗',\n    150781: '满洲里市',\n    150782: '牙克石市',\n    150783: '扎兰屯市',\n    150784: '额尔古纳市',\n    150785: '根河市'\n  },\n  150800: {\n    150802: '临河区',\n    150821: '五原县',\n    150822: '磴口县',\n    150823: '乌拉特前旗',\n    150824: '乌拉特中旗',\n    150825: '乌拉特后旗',\n    150826: '杭锦后旗'\n  },\n  150900: {\n    150902: '集宁区',\n    150921: '卓资县',\n    150922: '化德县',\n    150923: '商都县',\n    150924: '兴和县',\n    150925: '凉城县',\n    150926: '察哈尔右翼前旗',\n    150927: '察哈尔右翼中旗',\n    150928: '察哈尔右翼后旗',\n    150929: '四子王旗',\n    150981: '丰镇市'\n  },\n  152200: {\n    152201: '乌兰浩特市',\n    152202: '阿尔山市',\n    152221: '科尔沁右翼前旗',\n    152222: '科尔沁右翼中旗',\n    152223: '扎赉特旗',\n    152224: '突泉县'\n  },\n  152500: {\n    152501: '二连浩特市',\n    152502: '锡林浩特市',\n    152522: '阿巴嘎旗',\n    152523: '苏尼特左旗',\n    152524: '苏尼特右旗',\n    152525: '东乌珠穆沁旗',\n    152526: '西乌珠穆沁旗',\n    152527: '太仆寺旗',\n    152528: '镶黄旗',\n    152529: '正镶白旗',\n    152530: '正蓝旗',\n    152531: '多伦县'\n  },\n  152900: {\n    152921: '阿拉善左旗',\n    152922: '阿拉善右旗',\n    152923: '额济纳旗'\n  },\n  210000: {\n    210100: '沈阳市',\n    210200: '大连市',\n    210300: '鞍山市',\n    210400: '抚顺市',\n    210500: '本溪市',\n    210600: '丹东市',\n    210700: '锦州市',\n    210800: '营口市',\n    210900: '阜新市',\n    211000: '辽阳市',\n    211100: '盘锦市',\n    211200: '铁岭市',\n    211300: '朝阳市',\n    211400: '葫芦岛市'\n  },\n  210100: {\n    210102: '和平区',\n    210103: '沈河区',\n    210104: '大东区',\n    210105: '皇姑区',\n    210106: '铁西区',\n    210111: '苏家屯区',\n    210112: '浑南区',\n    210113: '沈北新区',\n    210114: '于洪区',\n    210115: '辽中区',\n    210123: '康平县',\n    210124: '法库县',\n    210181: '新民市'\n  },\n  210200: {\n    210202: '中山区',\n    210203: '西岗区',\n    210204: '沙河口区',\n    210211: '甘井子区',\n    210212: '旅顺口区',\n    210213: '金州区',\n    210214: '普兰店区',\n    210224: '长海县',\n    210281: '瓦房店市',\n    210283: '庄河市'\n  },\n  210300: {\n    210302: '铁东区',\n    210303: '铁西区',\n    210304: '立山区',\n    210311: '千山区',\n    210321: '台安县',\n    210323: '岫岩满族自治县',\n    210381: '海城市'\n  },\n  210400: {\n    210402: '新抚区',\n    210403: '东洲区',\n    210404: '望花区',\n    210411: '顺城区',\n    210421: '抚顺县',\n    210422: '新宾满族自治县',\n    210423: '清原满族自治县'\n  },\n  210500: {\n    210502: '平山区',\n    210503: '溪湖区',\n    210504: '明山区',\n    210505: '南芬区',\n    210521: '本溪满族自治县',\n    210522: '桓仁满族自治县'\n  },\n  210600: {\n    210602: '元宝区',\n    210603: '振兴区',\n    210604: '振安区',\n    210624: '宽甸满族自治县',\n    210681: '东港市',\n    210682: '凤城市'\n  },\n  210700: {\n    210702: '古塔区',\n    210703: '凌河区',\n    210711: '太和区',\n    210726: '黑山县',\n    210727: '义县',\n    210781: '凌海市',\n    210782: '北镇市'\n  },\n  210800: {\n    210802: '站前区',\n    210803: '西市区',\n    210804: '鲅鱼圈区',\n    210811: '老边区',\n    210881: '盖州市',\n    210882: '大石桥市'\n  },\n  210900: {\n    210902: '海州区',\n    210903: '新邱区',\n    210904: '太平区',\n    210905: '清河门区',\n    210911: '细河区',\n    210921: '阜新蒙古族自治县',\n    210922: '彰武县'\n  },\n  211000: {\n    211002: '白塔区',\n    211003: '文圣区',\n    211004: '宏伟区',\n    211005: '弓长岭区',\n    211011: '太子河区',\n    211021: '辽阳县',\n    211081: '灯塔市'\n  },\n  211100: {\n    211102: '双台子区',\n    211103: '兴隆台区',\n    211104: '大洼区',\n    211122: '盘山县'\n  },\n  211200: {\n    211202: '银州区',\n    211204: '清河区',\n    211221: '铁岭县',\n    211223: '西丰县',\n    211224: '昌图县',\n    211281: '调兵山市',\n    211282: '开原市'\n  },\n  211300: {\n    211302: '双塔区',\n    211303: '龙城区',\n    211321: '朝阳县',\n    211322: '建平县',\n    211324: '喀喇沁左翼蒙古族自治县',\n    211381: '北票市',\n    211382: '凌源市'\n  },\n  211400: {\n    211402: '连山区',\n    211403: '龙港区',\n    211404: '南票区',\n    211421: '绥中县',\n    211422: '建昌县',\n    211481: '兴城市'\n  },\n  220000: {\n    220100: '长春市',\n    220200: '吉林市',\n    220300: '四平市',\n    220400: '辽源市',\n    220500: '通化市',\n    220600: '白山市',\n    220700: '松原市',\n    220800: '白城市',\n    222400: '延边朝鲜族自治州'\n  },\n  220100: {\n    220102: '南关区',\n    220103: '宽城区',\n    220104: '朝阳区',\n    220105: '二道区',\n    220106: '绿园区',\n    220112: '双阳区',\n    220113: '九台区',\n    220122: '农安县',\n    220182: '榆树市',\n    220183: '德惠市'\n  },\n  220200: {\n    220202: '昌邑区',\n    220203: '龙潭区',\n    220204: '船营区',\n    220211: '丰满区',\n    220221: '永吉县',\n    220281: '蛟河市',\n    220282: '桦甸市',\n    220283: '舒兰市',\n    220284: '磐石市'\n  },\n  220300: {\n    220302: '铁西区',\n    220303: '铁东区',\n    220322: '梨树县',\n    220323: '伊通满族自治县',\n    220381: '公主岭市',\n    220382: '双辽市'\n  },\n  220400: {\n    220402: '龙山区',\n    220403: '西安区',\n    220421: '东丰县',\n    220422: '东辽县'\n  },\n  220500: {\n    220502: '东昌区',\n    220503: '二道江区',\n    220521: '通化县',\n    220523: '辉南县',\n    220524: '柳河县',\n    220581: '梅河口市',\n    220582: '集安市'\n  },\n  220600: {\n    220602: '浑江区',\n    220605: '江源区',\n    220621: '抚松县',\n    220622: '靖宇县',\n    220623: '长白朝鲜族自治县',\n    220681: '临江市'\n  },\n  220700: {\n    220702: '宁江区',\n    220721: '前郭尔罗斯蒙古族自治县',\n    220722: '长岭县',\n    220723: '乾安县',\n    220781: '扶余市'\n  },\n  220800: {\n    220802: '洮北区',\n    220821: '镇赉县',\n    220822: '通榆县',\n    220881: '洮南市',\n    220882: '大安市'\n  },\n  222400: {\n    222401: '延吉市',\n    222402: '图们市',\n    222403: '敦化市',\n    222404: '珲春市',\n    222405: '龙井市',\n    222406: '和龙市',\n    222424: '汪清县',\n    222426: '安图县'\n  },\n  230000: {\n    230100: '哈尔滨市',\n    230200: '齐齐哈尔市',\n    230300: '鸡西市',\n    230400: '鹤岗市',\n    230500: '双鸭山市',\n    230600: '大庆市',\n    230700: '伊春市',\n    230800: '佳木斯市',\n    230900: '七台河市',\n    231000: '牡丹江市',\n    231100: '黑河市',\n    231200: '绥化市',\n    232700: '大兴安岭地区'\n  },\n  230100: {\n    230102: '道里区',\n    230103: '南岗区',\n    230104: '道外区',\n    230108: '平房区',\n    230109: '松北区',\n    230110: '香坊区',\n    230111: '呼兰区',\n    230112: '阿城区',\n    230113: '双城区',\n    230123: '依兰县',\n    230124: '方正县',\n    230125: '宾县',\n    230126: '巴彦县',\n    230127: '木兰县',\n    230128: '通河县',\n    230129: '延寿县',\n    230183: '尚志市',\n    230184: '五常市'\n  },\n  230200: {\n    230202: '龙沙区',\n    230203: '建华区',\n    230204: '铁锋区',\n    230205: '昂昂溪区',\n    230206: '富拉尔基区',\n    230207: '碾子山区',\n    230208: '梅里斯达斡尔族区',\n    230221: '龙江县',\n    230223: '依安县',\n    230224: '泰来县',\n    230225: '甘南县',\n    230227: '富裕县',\n    230229: '克山县',\n    230230: '克东县',\n    230231: '拜泉县',\n    230281: '讷河市'\n  },\n  230300: {\n    230302: '鸡冠区',\n    230303: '恒山区',\n    230304: '滴道区',\n    230305: '梨树区',\n    230306: '城子河区',\n    230307: '麻山区',\n    230321: '鸡东县',\n    230381: '虎林市',\n    230382: '密山市'\n  },\n  230400: {\n    230402: '向阳区',\n    230403: '工农区',\n    230404: '南山区',\n    230405: '兴安区',\n    230406: '东山区',\n    230407: '兴山区',\n    230421: '萝北县',\n    230422: '绥滨县'\n  },\n  230500: {\n    230502: '尖山区',\n    230503: '岭东区',\n    230505: '四方台区',\n    230506: '宝山区',\n    230521: '集贤县',\n    230522: '友谊县',\n    230523: '宝清县',\n    230524: '饶河县'\n  },\n  230600: {\n    230602: '萨尔图区',\n    230603: '龙凤区',\n    230604: '让胡路区',\n    230605: '红岗区',\n    230606: '大同区',\n    230621: '肇州县',\n    230622: '肇源县',\n    230623: '林甸县',\n    230624: '杜尔伯特蒙古族自治县'\n  },\n  230700: {\n    230702: '伊春区',\n    230703: '南岔区',\n    230704: '友好区',\n    230705: '西林区',\n    230706: '翠峦区',\n    230707: '新青区',\n    230708: '美溪区',\n    230709: '金山屯区',\n    230710: '五营区',\n    230711: '乌马河区',\n    230712: '汤旺河区',\n    230713: '带岭区',\n    230714: '乌伊岭区',\n    230715: '红星区',\n    230716: '上甘岭区',\n    230722: '嘉荫县',\n    230781: '铁力市'\n  },\n  230800: {\n    230803: '向阳区',\n    230804: '前进区',\n    230805: '东风区',\n    230811: '郊区',\n    230822: '桦南县',\n    230826: '桦川县',\n    230828: '汤原县',\n    230881: '同江市',\n    230882: '富锦市',\n    230883: '抚远市'\n  },\n  230900: {\n    230902: '新兴区',\n    230903: '桃山区',\n    230904: '茄子河区',\n    230921: '勃利县'\n  },\n  231000: {\n    231002: '东安区',\n    231003: '阳明区',\n    231004: '爱民区',\n    231005: '西安区',\n    231025: '林口县',\n    231081: '绥芬河市',\n    231083: '海林市',\n    231084: '宁安市',\n    231085: '穆棱市',\n    231086: '东宁市'\n  },\n  231100: {\n    231102: '爱辉区',\n    231121: '嫩江县',\n    231123: '逊克县',\n    231124: '孙吴县',\n    231181: '北安市',\n    231182: '五大连池市'\n  },\n  231200: {\n    231202: '北林区',\n    231221: '望奎县',\n    231222: '兰西县',\n    231223: '青冈县',\n    231224: '庆安县',\n    231225: '明水县',\n    231226: '绥棱县',\n    231281: '安达市',\n    231282: '肇东市',\n    231283: '海伦市'\n  },\n  232700: {\n    232701: '加格达奇区',\n    232721: '呼玛县',\n    232722: '塔河县',\n    232723: '漠河县'\n  },\n  310000: {\n    310100: '上海市市辖区'\n  },\n  310100: {\n    310101: '黄浦区',\n    310104: '徐汇区',\n    310105: '长宁区',\n    310106: '静安区',\n    310107: '普陀区',\n    310109: '虹口区',\n    310110: '杨浦区',\n    310112: '闵行区',\n    310113: '宝山区',\n    310114: '嘉定区',\n    310115: '浦东新区',\n    310116: '金山区',\n    310117: '松江区',\n    310118: '青浦区',\n    310120: '奉贤区',\n    310151: '崇明区'\n  },\n  320000: {\n    320100: '南京市',\n    320200: '无锡市',\n    320300: '徐州市',\n    320400: '常州市',\n    320500: '苏州市',\n    320600: '南通市',\n    320700: '连云港市',\n    320800: '淮安市',\n    320900: '盐城市',\n    321000: '扬州市',\n    321100: '镇江市',\n    321200: '泰州市',\n    321300: '宿迁市'\n  },\n  320100: {\n    320102: '玄武区',\n    320104: '秦淮区',\n    320105: '建邺区',\n    320106: '鼓楼区',\n    320111: '浦口区',\n    320113: '栖霞区',\n    320114: '雨花台区',\n    320115: '江宁区',\n    320116: '六合区',\n    320117: '溧水区',\n    320118: '高淳区'\n  },\n  320200: {\n    320205: '锡山区',\n    320206: '惠山区',\n    320211: '滨湖区',\n    320213: '梁溪区',\n    320214: '新吴区',\n    320281: '江阴市',\n    320282: '宜兴市'\n  },\n  320300: {\n    320302: '鼓楼区',\n    320303: '云龙区',\n    320305: '贾汪区',\n    320311: '泉山区',\n    320312: '铜山区',\n    320321: '丰县',\n    320322: '沛县',\n    320324: '睢宁县',\n    320381: '新沂市',\n    320382: '邳州市'\n  },\n  320400: {\n    320402: '天宁区',\n    320404: '钟楼区',\n    320411: '新北区',\n    320412: '武进区',\n    320413: '金坛区',\n    320481: '溧阳市'\n  },\n  320500: {\n    320505: '虎丘区',\n    320506: '吴中区',\n    320507: '相城区',\n    320508: '姑苏区',\n    320509: '吴江区',\n    320581: '常熟市',\n    320582: '张家港市',\n    320583: '昆山市',\n    320585: '太仓市'\n  },\n  320600: {\n    320602: '崇川区',\n    320611: '港闸区',\n    320612: '通州区',\n    320621: '海安县',\n    320623: '如东县',\n    320681: '启东市',\n    320682: '如皋市',\n    320684: '海门市'\n  },\n  320700: {\n    320703: '连云区',\n    320706: '海州区',\n    320707: '赣榆区',\n    320722: '东海县',\n    320723: '灌云县',\n    320724: '灌南县'\n  },\n  320800: {\n    320802: '清江浦区',\n    320803: '淮安区',\n    320804: '淮阴区',\n    320813: '洪泽区',\n    320826: '涟水县',\n    320830: '盱眙县',\n    320831: '金湖县'\n  },\n  320900: {\n    320902: '亭湖区',\n    320903: '盐都区',\n    320904: '大丰区',\n    320921: '响水县',\n    320922: '滨海县',\n    320923: '阜宁县',\n    320924: '射阳县',\n    320925: '建湖县',\n    320981: '东台市'\n  },\n  321000: {\n    321002: '广陵区',\n    321003: '邗江区',\n    321012: '江都区',\n    321023: '宝应县',\n    321081: '仪征市',\n    321084: '高邮市'\n  },\n  321100: {\n    321102: '京口区',\n    321111: '润州区',\n    321112: '丹徒区',\n    321181: '丹阳市',\n    321182: '扬中市',\n    321183: '句容市'\n  },\n  321200: {\n    321202: '海陵区',\n    321203: '高港区',\n    321204: '姜堰区',\n    321281: '兴化市',\n    321282: '靖江市',\n    321283: '泰兴市'\n  },\n  321300: {\n    321302: '宿城区',\n    321311: '宿豫区',\n    321322: '沭阳县',\n    321323: '泗阳县',\n    321324: '泗洪县'\n  },\n  330000: {\n    330100: '杭州市',\n    330200: '宁波市',\n    330300: '温州市',\n    330400: '嘉兴市',\n    330500: '湖州市',\n    330600: '绍兴市',\n    330700: '金华市',\n    330800: '衢州市',\n    330900: '舟山市',\n    331000: '台州市',\n    331100: '丽水市'\n  },\n  330100: {\n    330102: '上城区',\n    330103: '下城区',\n    330104: '江干区',\n    330105: '拱墅区',\n    330106: '西湖区',\n    330108: '滨江区',\n    330109: '萧山区',\n    330110: '余杭区',\n    330111: '富阳区',\n    330122: '桐庐县',\n    330127: '淳安县',\n    330182: '建德市',\n    330185: '临安市'\n  },\n  330200: {\n    330203: '海曙区',\n    330205: '江北区',\n    330206: '北仑区',\n    330211: '镇海区',\n    330212: '鄞州区',\n    330225: '象山县',\n    330226: '宁海县',\n    330281: '余姚市',\n    330282: '慈溪市',\n    330283: '奉化区'\n  },\n  330300: {\n    330302: '鹿城区',\n    330303: '龙湾区',\n    330304: '瓯海区',\n    330305: '洞头区',\n    330324: '永嘉县',\n    330326: '平阳县',\n    330327: '苍南县',\n    330328: '文成县',\n    330329: '泰顺县',\n    330381: '瑞安市',\n    330382: '乐清市'\n  },\n  330400: {\n    330402: '南湖区',\n    330411: '秀洲区',\n    330421: '嘉善县',\n    330424: '海盐县',\n    330481: '海宁市',\n    330482: '平湖市',\n    330483: '桐乡市'\n  },\n  330500: {\n    330502: '吴兴区',\n    330503: '南浔区',\n    330521: '德清县',\n    330522: '长兴县',\n    330523: '安吉县'\n  },\n  330600: {\n    330602: '越城区',\n    330603: '柯桥区',\n    330604: '上虞区',\n    330624: '新昌县',\n    330681: '诸暨市',\n    330683: '嵊州市'\n  },\n  330700: {\n    330702: '婺城区',\n    330703: '金东区',\n    330723: '武义县',\n    330726: '浦江县',\n    330727: '磐安县',\n    330781: '兰溪市',\n    330782: '义乌市',\n    330783: '东阳市',\n    330784: '永康市'\n  },\n  330800: {\n    330802: '柯城区',\n    330803: '衢江区',\n    330822: '常山县',\n    330824: '开化县',\n    330825: '龙游县',\n    330881: '江山市'\n  },\n  330900: {\n    330902: '定海区',\n    330903: '普陀区',\n    330921: '岱山县',\n    330922: '嵊泗县'\n  },\n  331000: {\n    331002: '椒江区',\n    331003: '黄岩区',\n    331004: '路桥区',\n    331021: '玉环县',\n    331022: '三门县',\n    331023: '天台县',\n    331024: '仙居县',\n    331081: '温岭市',\n    331082: '临海市'\n  },\n  331100: {\n    331102: '莲都区',\n    331121: '青田县',\n    331122: '缙云县',\n    331123: '遂昌县',\n    331124: '松阳县',\n    331125: '云和县',\n    331126: '庆元县',\n    331127: '景宁畲族自治县',\n    331181: '龙泉市'\n  },\n  340000: {\n    340100: '合肥市',\n    340200: '芜湖市',\n    340300: '蚌埠市',\n    340400: '淮南市',\n    340500: '马鞍山市',\n    340600: '淮北市',\n    340700: '铜陵市',\n    340800: '安庆市',\n    341000: '黄山市',\n    341100: '滁州市',\n    341200: '阜阳市',\n    341300: '宿州市',\n    341500: '六安市',\n    341600: '亳州市',\n    341700: '池州市',\n    341800: '宣城市'\n  },\n  340100: {\n    340102: '瑶海区',\n    340103: '庐阳区',\n    340104: '蜀山区',\n    340111: '包河区',\n    340121: '长丰县',\n    340122: '肥东县',\n    340123: '肥西县',\n    340124: '庐江县',\n    340181: '巢湖市'\n  },\n  340200: {\n    340202: '镜湖区',\n    340203: '弋江区',\n    340207: '鸠江区',\n    340208: '三山区',\n    340221: '芜湖县',\n    340222: '繁昌县',\n    340223: '南陵县',\n    340225: '无为县'\n  },\n  340300: {\n    340302: '龙子湖区',\n    340303: '蚌山区',\n    340304: '禹会区',\n    340311: '淮上区',\n    340321: '怀远县',\n    340322: '五河县',\n    340323: '固镇县'\n  },\n  340400: {\n    340402: '大通区',\n    340403: '田家庵区',\n    340404: '谢家集区',\n    340405: '八公山区',\n    340406: '潘集区',\n    340421: '凤台县',\n    340422: '寿县'\n  },\n  340500: {\n    340503: '花山区',\n    340504: '雨山区',\n    340506: '博望区',\n    340521: '当涂县',\n    340522: '含山县',\n    340523: '和县'\n  },\n  340600: {\n    340602: '杜集区',\n    340603: '相山区',\n    340604: '烈山区',\n    340621: '濉溪县'\n  },\n  340700: {\n    340705: '铜官区',\n    340706: '义安区',\n    340711: '郊区',\n    340722: '枞阳县'\n  },\n  340800: {\n    340802: '迎江区',\n    340803: '大观区',\n    340811: '宜秀区',\n    340822: '怀宁县',\n    340824: '潜山县',\n    340825: '太湖县',\n    340826: '宿松县',\n    340827: '望江县',\n    340828: '岳西县',\n    340881: '桐城市'\n  },\n  341000: {\n    341002: '屯溪区',\n    341003: '黄山区',\n    341004: '徽州区',\n    341021: '歙县',\n    341022: '休宁县',\n    341023: '黟县',\n    341024: '祁门县'\n  },\n  341100: {\n    341102: '琅琊区',\n    341103: '南谯区',\n    341122: '来安县',\n    341124: '全椒县',\n    341125: '定远县',\n    341126: '凤阳县',\n    341181: '天长市',\n    341182: '明光市'\n  },\n  341200: {\n    341202: '颍州区',\n    341203: '颍东区',\n    341204: '颍泉区',\n    341221: '临泉县',\n    341222: '太和县',\n    341225: '阜南县',\n    341226: '颍上县',\n    341282: '界首市'\n  },\n  341300: {\n    341302: '埇桥区',\n    341321: '砀山县',\n    341322: '萧县',\n    341323: '灵璧县',\n    341324: '泗县'\n  },\n  341500: {\n    341502: '金安区',\n    341503: '裕安区',\n    341504: '叶集区',\n    341522: '霍邱县',\n    341523: '舒城县',\n    341524: '金寨县',\n    341525: '霍山县'\n  },\n  341600: {\n    341602: '谯城区',\n    341621: '涡阳县',\n    341622: '蒙城县',\n    341623: '利辛县'\n  },\n  341700: {\n    341702: '贵池区',\n    341721: '东至县',\n    341722: '石台县',\n    341723: '青阳县'\n  },\n  341800: {\n    341802: '宣州区',\n    341821: '郎溪县',\n    341822: '广德县',\n    341823: '泾县',\n    341824: '绩溪县',\n    341825: '旌德县',\n    341881: '宁国市'\n  },\n  350000: {\n    350100: '福州市',\n    350200: '厦门市',\n    350300: '莆田市',\n    350400: '三明市',\n    350500: '泉州市',\n    350600: '漳州市',\n    350700: '南平市',\n    350800: '龙岩市',\n    350900: '宁德市'\n  },\n  350100: {\n    350102: '鼓楼区',\n    350103: '台江区',\n    350104: '仓山区',\n    350105: '马尾区',\n    350111: '晋安区',\n    350121: '闽侯县',\n    350122: '连江县',\n    350123: '罗源县',\n    350124: '闽清县',\n    350125: '永泰县',\n    350128: '平潭县',\n    350181: '福清市',\n    350182: '长乐市'\n  },\n  350200: {\n    350203: '思明区',\n    350205: '海沧区',\n    350206: '湖里区',\n    350211: '集美区',\n    350212: '同安区',\n    350213: '翔安区'\n  },\n  350300: {\n    350302: '城厢区',\n    350303: '涵江区',\n    350304: '荔城区',\n    350305: '秀屿区',\n    350322: '仙游县'\n  },\n  350400: {\n    350402: '梅列区',\n    350403: '三元区',\n    350421: '明溪县',\n    350423: '清流县',\n    350424: '宁化县',\n    350425: '大田县',\n    350426: '尤溪县',\n    350427: '沙县',\n    350428: '将乐县',\n    350429: '泰宁县',\n    350430: '建宁县',\n    350481: '永安市'\n  },\n  350500: {\n    350502: '鲤城区',\n    350503: '丰泽区',\n    350504: '洛江区',\n    350505: '泉港区',\n    350521: '惠安县',\n    350524: '安溪县',\n    350525: '永春县',\n    350526: '德化县',\n    350527: '金门县',\n    350581: '石狮市',\n    350582: '晋江市',\n    350583: '南安市'\n  },\n  350600: {\n    350602: '芗城区',\n    350603: '龙文区',\n    350622: '云霄县',\n    350623: '漳浦县',\n    350624: '诏安县',\n    350625: '长泰县',\n    350626: '东山县',\n    350627: '南靖县',\n    350628: '平和县',\n    350629: '华安县',\n    350681: '龙海市'\n  },\n  350700: {\n    350702: '延平区',\n    350703: '建阳区',\n    350721: '顺昌县',\n    350722: '浦城县',\n    350723: '光泽县',\n    350724: '松溪县',\n    350725: '政和县',\n    350781: '邵武市',\n    350782: '武夷山市',\n    350783: '建瓯市'\n  },\n  350800: {\n    350802: '新罗区',\n    350803: '永定区',\n    350821: '长汀县',\n    350823: '上杭县',\n    350824: '武平县',\n    350825: '连城县',\n    350881: '漳平市'\n  },\n  350900: {\n    350902: '蕉城区',\n    350921: '霞浦县',\n    350922: '古田县',\n    350923: '屏南县',\n    350924: '寿宁县',\n    350925: '周宁县',\n    350926: '柘荣县',\n    350981: '福安市',\n    350982: '福鼎市'\n  },\n  360000: {\n    360100: '南昌市',\n    360200: '景德镇市',\n    360300: '萍乡市',\n    360400: '九江市',\n    360500: '新余市',\n    360600: '鹰潭市',\n    360700: '赣州市',\n    360800: '吉安市',\n    360900: '宜春市',\n    361000: '抚州市',\n    361100: '上饶市'\n  },\n  360100: {\n    360102: '东湖区',\n    360103: '西湖区',\n    360104: '青云谱区',\n    360105: '湾里区',\n    360111: '青山湖区',\n    360112: '新建区',\n    360121: '南昌县',\n    360123: '安义县',\n    360124: '进贤县'\n  },\n  360200: {\n    360202: '昌江区',\n    360203: '珠山区',\n    360222: '浮梁县',\n    360281: '乐平市'\n  },\n  360300: {\n    360302: '安源区',\n    360313: '湘东区',\n    360321: '莲花县',\n    360322: '上栗县',\n    360323: '芦溪县'\n  },\n  360400: {\n    360402: '濂溪区',\n    360403: '浔阳区',\n    360421: '九江县',\n    360423: '武宁县',\n    360424: '修水县',\n    360425: '永修县',\n    360426: '德安县',\n    360427: '庐山市',\n    360428: '都昌县',\n    360429: '湖口县',\n    360430: '彭泽县',\n    360481: '瑞昌市',\n    360482: '共青城市'\n  },\n  360500: {\n    360502: '渝水区',\n    360521: '分宜县'\n  },\n  360600: {\n    360602: '月湖区',\n    360622: '余江县',\n    360681: '贵溪市'\n  },\n  360700: {\n    360702: '章贡区',\n    360703: '南康区',\n    360721: '赣县区',\n    360722: '信丰县',\n    360723: '大余县',\n    360724: '上犹县',\n    360725: '崇义县',\n    360726: '安远县',\n    360727: '龙南县',\n    360728: '定南县',\n    360729: '全南县',\n    360730: '宁都县',\n    360731: '于都县',\n    360732: '兴国县',\n    360733: '会昌县',\n    360734: '寻乌县',\n    360735: '石城县',\n    360781: '瑞金市'\n  },\n  360800: {\n    360802: '吉州区',\n    360803: '青原区',\n    360821: '吉安县',\n    360822: '吉水县',\n    360823: '峡江县',\n    360824: '新干县',\n    360825: '永丰县',\n    360826: '泰和县',\n    360827: '遂川县',\n    360828: '万安县',\n    360829: '安福县',\n    360830: '永新县',\n    360881: '井冈山市'\n  },\n  360900: {\n    360902: '袁州区',\n    360921: '奉新县',\n    360922: '万载县',\n    360923: '上高县',\n    360924: '宜丰县',\n    360925: '靖安县',\n    360926: '铜鼓县',\n    360981: '丰城市',\n    360982: '樟树市',\n    360983: '高安市'\n  },\n  361000: {\n    361002: '临川区',\n    361021: '南城县',\n    361022: '黎川县',\n    361023: '南丰县',\n    361024: '崇仁县',\n    361025: '乐安县',\n    361026: '宜黄县',\n    361027: '金溪县',\n    361028: '资溪县',\n    361029: '东乡县',\n    361030: '广昌县'\n  },\n  361100: {\n    361102: '信州区',\n    361103: '广丰区',\n    361121: '上饶县',\n    361123: '玉山县',\n    361124: '铅山县',\n    361125: '横峰县',\n    361126: '弋阳县',\n    361127: '余干县',\n    361128: '鄱阳县',\n    361129: '万年县',\n    361130: '婺源县',\n    361181: '德兴市'\n  },\n  370000: {\n    370100: '济南市',\n    370200: '青岛市',\n    370300: '淄博市',\n    370400: '枣庄市',\n    370500: '东营市',\n    370600: '烟台市',\n    370700: '潍坊市',\n    370800: '济宁市',\n    370900: '泰安市',\n    371000: '威海市',\n    371100: '日照市',\n    371200: '莱芜市',\n    371300: '临沂市',\n    371400: '德州市',\n    371500: '聊城市',\n    371600: '滨州市',\n    371700: '菏泽市'\n  },\n  370100: {\n    370102: '历下区',\n    370103: '市中区',\n    370104: '槐荫区',\n    370105: '天桥区',\n    370112: '历城区',\n    370113: '长清区',\n    370124: '平阴县',\n    370125: '济阳县',\n    370126: '商河县',\n    370181: '章丘区'\n  },\n  370200: {\n    370202: '市南区',\n    370203: '市北区',\n    370211: '黄岛区',\n    370212: '崂山区',\n    370213: '李沧区',\n    370214: '城阳区',\n    370281: '胶州市',\n    370282: '即墨市',\n    370283: '平度市',\n    370285: '莱西市'\n  },\n  370300: {\n    370302: '淄川区',\n    370303: '张店区',\n    370304: '博山区',\n    370305: '临淄区',\n    370306: '周村区',\n    370321: '桓台县',\n    370322: '高青县',\n    370323: '沂源县'\n  },\n  370400: {\n    370402: '市中区',\n    370403: '薛城区',\n    370404: '峄城区',\n    370405: '台儿庄区',\n    370406: '山亭区',\n    370481: '滕州市'\n  },\n  370500: {\n    370502: '东营区',\n    370503: '河口区',\n    370505: '垦利区',\n    370522: '利津县',\n    370523: '广饶县'\n  },\n  370600: {\n    370602: '芝罘区',\n    370611: '福山区',\n    370612: '牟平区',\n    370613: '莱山区',\n    370634: '长岛县',\n    370681: '龙口市',\n    370682: '莱阳市',\n    370683: '莱州市',\n    370684: '蓬莱市',\n    370685: '招远市',\n    370686: '栖霞市',\n    370687: '海阳市'\n  },\n  370700: {\n    370702: '潍城区',\n    370703: '寒亭区',\n    370704: '坊子区',\n    370705: '奎文区',\n    370724: '临朐县',\n    370725: '昌乐县',\n    370781: '青州市',\n    370782: '诸城市',\n    370783: '寿光市',\n    370784: '安丘市',\n    370785: '高密市',\n    370786: '昌邑市'\n  },\n  370800: {\n    370811: '任城区',\n    370812: '兖州区',\n    370826: '微山县',\n    370827: '鱼台县',\n    370828: '金乡县',\n    370829: '嘉祥县',\n    370830: '汶上县',\n    370831: '泗水县',\n    370832: '梁山县',\n    370881: '曲阜市',\n    370883: '邹城市'\n  },\n  370900: {\n    370902: '泰山区',\n    370911: '岱岳区',\n    370921: '宁阳县',\n    370923: '东平县',\n    370982: '新泰市',\n    370983: '肥城市'\n  },\n  371000: {\n    371002: '环翠区',\n    371003: '文登区',\n    371082: '荣成市',\n    371083: '乳山市'\n  },\n  371100: {\n    371102: '东港区',\n    371103: '岚山区',\n    371121: '五莲县',\n    371122: '莒县'\n  },\n  371200: {\n    371202: '莱城区',\n    371203: '钢城区'\n  },\n  371300: {\n    371302: '兰山区',\n    371311: '罗庄区',\n    371312: '河东区',\n    371321: '沂南县',\n    371322: '郯城县',\n    371323: '沂水县',\n    371324: '兰陵县',\n    371325: '费县',\n    371326: '平邑县',\n    371327: '莒南县',\n    371328: '蒙阴县',\n    371329: '临沭县'\n  },\n  371400: {\n    371402: '德城区',\n    371403: '陵城区',\n    371422: '宁津县',\n    371423: '庆云县',\n    371424: '临邑县',\n    371425: '齐河县',\n    371426: '平原县',\n    371427: '夏津县',\n    371428: '武城县',\n    371481: '乐陵市',\n    371482: '禹城市'\n  },\n  371500: {\n    371502: '东昌府区',\n    371521: '阳谷县',\n    371522: '莘县',\n    371523: '茌平县',\n    371524: '东阿县',\n    371525: '冠县',\n    371526: '高唐县',\n    371581: '临清市'\n  },\n  371600: {\n    371602: '滨城区',\n    371603: '沾化区',\n    371621: '惠民县',\n    371622: '阳信县',\n    371623: '无棣县',\n    371625: '博兴县',\n    371626: '邹平县'\n  },\n  371700: {\n    371702: '牡丹区',\n    371703: '定陶区',\n    371721: '曹县',\n    371722: '单县',\n    371723: '成武县',\n    371724: '巨野县',\n    371725: '郓城县',\n    371726: '鄄城县',\n    371728: '东明县'\n  },\n  410000: {\n    410100: '郑州市',\n    410200: '开封市',\n    410300: '洛阳市',\n    410400: '平顶山市',\n    410500: '安阳市',\n    410600: '鹤壁市',\n    410700: '新乡市',\n    410800: '焦作市',\n    410900: '濮阳市',\n    411000: '许昌市',\n    411100: '漯河市',\n    411200: '三门峡市',\n    411300: '南阳市',\n    411400: '商丘市',\n    411500: '信阳市',\n    411600: '周口市',\n    411700: '驻马店市',\n    419001: '济源市'\n  },\n  410100: {\n    410102: '中原区',\n    410103: '二七区',\n    410104: '管城回族区',\n    410105: '金水区',\n    410106: '上街区',\n    410108: '惠济区',\n    410122: '中牟县',\n    410181: '巩义市',\n    410182: '荥阳市',\n    410183: '新密市',\n    410184: '新郑市',\n    410185: '登封市'\n  },\n  410200: {\n    410202: '龙亭区',\n    410203: '顺河回族区',\n    410204: '鼓楼区',\n    410205: '禹王台区',\n    410212: '祥符区',\n    410221: '杞县',\n    410222: '通许县',\n    410223: '尉氏县',\n    410225: '兰考县'\n  },\n  410300: {\n    410302: '老城区',\n    410303: '西工区',\n    410304: '瀍河回族区',\n    410305: '涧西区',\n    410306: '吉利区',\n    410311: '洛龙区',\n    410322: '孟津县',\n    410323: '新安县',\n    410324: '栾川县',\n    410325: '嵩县',\n    410326: '汝阳县',\n    410327: '宜阳县',\n    410328: '洛宁县',\n    410329: '伊川县',\n    410381: '偃师市'\n  },\n  410400: {\n    410402: '新华区',\n    410403: '卫东区',\n    410404: '石龙区',\n    410411: '湛河区',\n    410421: '宝丰县',\n    410422: '叶县',\n    410423: '鲁山县',\n    410425: '郏县',\n    410481: '舞钢市',\n    410482: '汝州市'\n  },\n  410500: {\n    410502: '文峰区',\n    410503: '北关区',\n    410505: '殷都区',\n    410506: '龙安区',\n    410522: '安阳县',\n    410523: '汤阴县',\n    410526: '滑县',\n    410527: '内黄县',\n    410581: '林州市'\n  },\n  410600: {\n    410602: '鹤山区',\n    410603: '山城区',\n    410611: '淇滨区',\n    410621: '浚县',\n    410622: '淇县'\n  },\n  410700: {\n    410702: '红旗区',\n    410703: '卫滨区',\n    410704: '凤泉区',\n    410711: '牧野区',\n    410721: '新乡县',\n    410724: '获嘉县',\n    410725: '原阳县',\n    410726: '延津县',\n    410727: '封丘县',\n    410728: '长垣县',\n    410781: '卫辉市',\n    410782: '辉县市'\n  },\n  410800: {\n    410802: '解放区',\n    410803: '中站区',\n    410804: '马村区',\n    410811: '山阳区',\n    410821: '修武县',\n    410822: '博爱县',\n    410823: '武陟县',\n    410825: '温县',\n    410882: '沁阳市',\n    410883: '孟州市'\n  },\n  410900: {\n    410902: '华龙区',\n    410922: '清丰县',\n    410923: '南乐县',\n    410926: '范县',\n    410927: '台前县',\n    410928: '濮阳县'\n  },\n  411000: {\n    411002: '魏都区',\n    411023: '建安区',\n    411024: '鄢陵县',\n    411025: '襄城县',\n    411081: '禹州市',\n    411082: '长葛市'\n  },\n  411100: {\n    411102: '源汇区',\n    411103: '郾城区',\n    411104: '召陵区',\n    411121: '舞阳县',\n    411122: '临颍县'\n  },\n  411200: {\n    411202: '湖滨区',\n    411203: '陕州区',\n    411221: '渑池县',\n    411224: '卢氏县',\n    411281: '义马市',\n    411282: '灵宝市'\n  },\n  411300: {\n    411302: '宛城区',\n    411303: '卧龙区',\n    411321: '南召县',\n    411322: '方城县',\n    411323: '西峡县',\n    411324: '镇平县',\n    411325: '内乡县',\n    411326: '淅川县',\n    411327: '社旗县',\n    411328: '唐河县',\n    411329: '新野县',\n    411330: '桐柏县',\n    411381: '邓州市'\n  },\n  411400: {\n    411402: '梁园区',\n    411403: '睢阳区',\n    411421: '民权县',\n    411422: '睢县',\n    411423: '宁陵县',\n    411424: '柘城县',\n    411425: '虞城县',\n    411426: '夏邑县',\n    411481: '永城市'\n  },\n  411500: {\n    411502: '浉河区',\n    411503: '平桥区',\n    411521: '罗山县',\n    411522: '光山县',\n    411523: '新县',\n    411524: '商城县',\n    411525: '固始县',\n    411526: '潢川县',\n    411527: '淮滨县',\n    411528: '息县'\n  },\n  411600: {\n    411602: '川汇区',\n    411621: '扶沟县',\n    411622: '西华县',\n    411623: '商水县',\n    411624: '沈丘县',\n    411625: '郸城县',\n    411626: '淮阳县',\n    411627: '太康县',\n    411628: '鹿邑县',\n    411681: '项城市'\n  },\n  411700: {\n    411702: '驿城区',\n    411721: '西平县',\n    411722: '上蔡县',\n    411723: '平舆县',\n    411724: '正阳县',\n    411725: '确山县',\n    411726: '泌阳县',\n    411727: '汝南县',\n    411728: '遂平县',\n    411729: '新蔡县'\n  },\n  420000: {\n    420100: '武汉市',\n    420200: '黄石市',\n    420300: '十堰市',\n    420500: '宜昌市',\n    420600: '襄阳市',\n    420700: '鄂州市',\n    420800: '荆门市',\n    420900: '孝感市',\n    421000: '荆州市',\n    421100: '黄冈市',\n    421200: '咸宁市',\n    421300: '随州市',\n    422800: '恩施土家族苗族自治州',\n    429004: '仙桃市',\n    429005: '潜江市',\n    429006: '天门市',\n    429021: '神农架林区'\n  },\n  420100: {\n    420102: '江岸区',\n    420103: '江汉区',\n    420104: '硚口区',\n    420105: '汉阳区',\n    420106: '武昌区',\n    420107: '青山区',\n    420111: '洪山区',\n    420112: '东西湖区',\n    420113: '汉南区',\n    420114: '蔡甸区',\n    420115: '江夏区',\n    420116: '黄陂区',\n    420117: '新洲区'\n  },\n  420200: {\n    420202: '黄石港区',\n    420203: '西塞山区',\n    420204: '下陆区',\n    420205: '铁山区',\n    420222: '阳新县',\n    420281: '大冶市'\n  },\n  420300: {\n    420302: '茅箭区',\n    420303: '张湾区',\n    420304: '郧阳区',\n    420322: '郧西县',\n    420323: '竹山县',\n    420324: '竹溪县',\n    420325: '房县',\n    420381: '丹江口市'\n  },\n  420500: {\n    420502: '西陵区',\n    420503: '伍家岗区',\n    420504: '点军区',\n    420505: '猇亭区',\n    420506: '夷陵区',\n    420525: '远安县',\n    420526: '兴山县',\n    420527: '秭归县',\n    420528: '长阳土家族自治县',\n    420529: '五峰土家族自治县',\n    420581: '宜都市',\n    420582: '当阳市',\n    420583: '枝江市'\n  },\n  420600: {\n    420602: '襄城区',\n    420606: '樊城区',\n    420607: '襄州区',\n    420624: '南漳县',\n    420625: '谷城县',\n    420626: '保康县',\n    420682: '老河口市',\n    420683: '枣阳市',\n    420684: '宜城市'\n  },\n  420700: {\n    420702: '梁子湖区',\n    420703: '华容区',\n    420704: '鄂城区'\n  },\n  420800: {\n    420802: '东宝区',\n    420804: '掇刀区',\n    420821: '京山县',\n    420822: '沙洋县',\n    420881: '钟祥市'\n  },\n  420900: {\n    420902: '孝南区',\n    420921: '孝昌县',\n    420922: '大悟县',\n    420923: '云梦县',\n    420981: '应城市',\n    420982: '安陆市',\n    420984: '汉川市'\n  },\n  421000: {\n    421002: '沙市区',\n    421003: '荆州区',\n    421022: '公安县',\n    421023: '监利县',\n    421024: '江陵县',\n    421081: '石首市',\n    421083: '洪湖市',\n    421087: '松滋市'\n  },\n  421100: {\n    421102: '黄州区',\n    421121: '团风县',\n    421122: '红安县',\n    421123: '罗田县',\n    421124: '英山县',\n    421125: '浠水县',\n    421126: '蕲春县',\n    421127: '黄梅县',\n    421181: '麻城市',\n    421182: '武穴市'\n  },\n  421200: {\n    421202: '咸安区',\n    421221: '嘉鱼县',\n    421222: '通城县',\n    421223: '崇阳县',\n    421224: '通山县',\n    421281: '赤壁市'\n  },\n  421300: {\n    421303: '曾都区',\n    421321: '随县',\n    421381: '广水市'\n  },\n  422800: {\n    422801: '恩施市',\n    422802: '利川市',\n    422822: '建始县',\n    422823: '巴东县',\n    422825: '宣恩县',\n    422826: '咸丰县',\n    422827: '来凤县',\n    422828: '鹤峰县'\n  },\n  430000: {\n    430100: '长沙市',\n    430200: '株洲市',\n    430300: '湘潭市',\n    430400: '衡阳市',\n    430500: '邵阳市',\n    430600: '岳阳市',\n    430700: '常德市',\n    430800: '张家界市',\n    430900: '益阳市',\n    431000: '郴州市',\n    431100: '永州市',\n    431200: '怀化市',\n    431300: '娄底市',\n    433100: '湘西土家族苗族自治州'\n  },\n  430100: {\n    430102: '芙蓉区',\n    430103: '天心区',\n    430104: '岳麓区',\n    430105: '开福区',\n    430111: '雨花区',\n    430112: '望城区',\n    430121: '长沙县',\n    430124: '宁乡县',\n    430181: '浏阳市'\n  },\n  430200: {\n    430202: '荷塘区',\n    430203: '芦淞区',\n    430204: '石峰区',\n    430211: '天元区',\n    430221: '株洲县',\n    430223: '攸县',\n    430224: '茶陵县',\n    430225: '炎陵县',\n    430281: '醴陵市'\n  },\n  430300: {\n    430302: '雨湖区',\n    430304: '岳塘区',\n    430321: '湘潭县',\n    430381: '湘乡市',\n    430382: '韶山市'\n  },\n  430400: {\n    430405: '珠晖区',\n    430406: '雁峰区',\n    430407: '石鼓区',\n    430408: '蒸湘区',\n    430412: '南岳区',\n    430421: '衡阳县',\n    430422: '衡南县',\n    430423: '衡山县',\n    430424: '衡东县',\n    430426: '祁东县',\n    430481: '耒阳市',\n    430482: '常宁市'\n  },\n  430500: {\n    430502: '双清区',\n    430503: '大祥区',\n    430511: '北塔区',\n    430521: '邵东县',\n    430522: '新邵县',\n    430523: '邵阳县',\n    430524: '隆回县',\n    430525: '洞口县',\n    430527: '绥宁县',\n    430528: '新宁县',\n    430529: '城步苗族自治县',\n    430581: '武冈市'\n  },\n  430600: {\n    430602: '岳阳楼区',\n    430603: '云溪区',\n    430611: '君山区',\n    430621: '岳阳县',\n    430623: '华容县',\n    430624: '湘阴县',\n    430626: '平江县',\n    430681: '汨罗市',\n    430682: '临湘市'\n  },\n  430700: {\n    430702: '武陵区',\n    430703: '鼎城区',\n    430721: '安乡县',\n    430722: '汉寿县',\n    430723: '澧县',\n    430724: '临澧县',\n    430725: '桃源县',\n    430726: '石门县',\n    430781: '津市市'\n  },\n  430800: {\n    430802: '永定区',\n    430811: '武陵源区',\n    430821: '慈利县',\n    430822: '桑植县'\n  },\n  430900: {\n    430902: '资阳区',\n    430903: '赫山区',\n    430921: '南县',\n    430922: '桃江县',\n    430923: '安化县',\n    430981: '沅江市'\n  },\n  431000: {\n    431002: '北湖区',\n    431003: '苏仙区',\n    431021: '桂阳县',\n    431022: '宜章县',\n    431023: '永兴县',\n    431024: '嘉禾县',\n    431025: '临武县',\n    431026: '汝城县',\n    431027: '桂东县',\n    431028: '安仁县',\n    431081: '资兴市'\n  },\n  431100: {\n    431102: '零陵区',\n    431103: '冷水滩区',\n    431121: '祁阳县',\n    431122: '东安县',\n    431123: '双牌县',\n    431124: '道县',\n    431125: '江永县',\n    431126: '宁远县',\n    431127: '蓝山县',\n    431128: '新田县',\n    431129: '江华瑶族自治县'\n  },\n  431200: {\n    431202: '鹤城区',\n    431221: '中方县',\n    431222: '沅陵县',\n    431223: '辰溪县',\n    431224: '溆浦县',\n    431225: '会同县',\n    431226: '麻阳苗族自治县',\n    431227: '新晃侗族自治县',\n    431228: '芷江侗族自治县',\n    431229: '靖州苗族侗族自治县',\n    431230: '通道侗族自治县',\n    431281: '洪江市'\n  },\n  431300: {\n    431302: '娄星区',\n    431321: '双峰县',\n    431322: '新化县',\n    431381: '冷水江市',\n    431382: '涟源市'\n  },\n  433100: {\n    433101: '吉首市',\n    433122: '泸溪县',\n    433123: '凤凰县',\n    433124: '花垣县',\n    433125: '保靖县',\n    433126: '古丈县',\n    433127: '永顺县',\n    433130: '龙山县'\n  },\n  440000: {\n    440100: '广州市',\n    440200: '韶关市',\n    440300: '深圳市',\n    440400: '珠海市',\n    440500: '汕头市',\n    440600: '佛山市',\n    440700: '江门市',\n    440800: '湛江市',\n    440900: '茂名市',\n    441200: '肇庆市',\n    441300: '惠州市',\n    441400: '梅州市',\n    441500: '汕尾市',\n    441600: '河源市',\n    441700: '阳江市',\n    441800: '清远市',\n    441900: '东莞市',\n    442000: '中山市',\n    445100: '潮州市',\n    445200: '揭阳市',\n    445300: '云浮市'\n  },\n  440100: {\n    440103: '荔湾区',\n    440104: '越秀区',\n    440105: '海珠区',\n    440106: '天河区',\n    440111: '白云区',\n    440112: '黄埔区',\n    440113: '番禺区',\n    440114: '花都区',\n    440115: '南沙区',\n    440117: '从化区',\n    440118: '增城区'\n  },\n  440200: {\n    440203: '武江区',\n    440204: '浈江区',\n    440205: '曲江区',\n    440222: '始兴县',\n    440224: '仁化县',\n    440229: '翁源县',\n    440232: '乳源瑶族自治县',\n    440233: '新丰县',\n    440281: '乐昌市',\n    440282: '南雄市'\n  },\n  440300: {\n    440303: '罗湖区',\n    440304: '福田区',\n    440305: '南山区',\n    440306: '宝安区',\n    440307: '龙岗区',\n    440308: '盐田区',\n    440309: '龙华区',\n    440310: '坪山区'\n  },\n  440400: {\n    440402: '香洲区',\n    440403: '斗门区',\n    440404: '金湾区'\n  },\n  440500: {\n    440507: '龙湖区',\n    440511: '金平区',\n    440512: '濠江区',\n    440513: '潮阳区',\n    440514: '潮南区',\n    440515: '澄海区',\n    440523: '南澳县'\n  },\n  440600: {\n    440604: '禅城区',\n    440605: '南海区',\n    440606: '顺德区',\n    440607: '三水区',\n    440608: '高明区'\n  },\n  440700: {\n    440703: '蓬江区',\n    440704: '江海区',\n    440705: '新会区',\n    440781: '台山市',\n    440783: '开平市',\n    440784: '鹤山市',\n    440785: '恩平市'\n  },\n  440800: {\n    440802: '赤坎区',\n    440803: '霞山区',\n    440804: '坡头区',\n    440811: '麻章区',\n    440823: '遂溪县',\n    440825: '徐闻县',\n    440881: '廉江市',\n    440882: '雷州市',\n    440883: '吴川市'\n  },\n  440900: {\n    440902: '茂南区',\n    440904: '电白区',\n    440981: '高州市',\n    440982: '化州市',\n    440983: '信宜市'\n  },\n  441200: {\n    441202: '端州区',\n    441203: '鼎湖区',\n    441204: '高要区',\n    441223: '广宁县',\n    441224: '怀集县',\n    441225: '封开县',\n    441226: '德庆县',\n    441284: '四会市'\n  },\n  441300: {\n    441302: '惠城区',\n    441303: '惠阳区',\n    441322: '博罗县',\n    441323: '惠东县',\n    441324: '龙门县'\n  },\n  441400: {\n    441402: '梅江区',\n    441403: '梅县区',\n    441422: '大埔县',\n    441423: '丰顺县',\n    441424: '五华县',\n    441426: '平远县',\n    441427: '蕉岭县',\n    441481: '兴宁市'\n  },\n  441500: {\n    441502: '城区',\n    441521: '海丰县',\n    441523: '陆河县',\n    441581: '陆丰市'\n  },\n  441600: {\n    441602: '源城区',\n    441621: '紫金县',\n    441622: '龙川县',\n    441623: '连平县',\n    441624: '和平县',\n    441625: '东源县'\n  },\n  441700: {\n    441702: '江城区',\n    441704: '阳东区',\n    441721: '阳西县',\n    441781: '阳春市'\n  },\n  441800: {\n    441802: '清城区',\n    441803: '清新区',\n    441821: '佛冈县',\n    441823: '阳山县',\n    441825: '连山壮族瑶族自治县',\n    441826: '连南瑶族自治县',\n    441881: '英德市',\n    441882: '连州市'\n  },\n  445100: {\n    445102: '湘桥区',\n    445103: '潮安区',\n    445122: '饶平县'\n  },\n  445200: {\n    445202: '榕城区',\n    445203: '揭东区',\n    445222: '揭西县',\n    445224: '惠来县',\n    445281: '普宁市'\n  },\n  445300: {\n    445302: '云城区',\n    445303: '云安区',\n    445321: '新兴县',\n    445322: '郁南县',\n    445381: '罗定市'\n  },\n  450000: {\n    450100: '南宁市',\n    450200: '柳州市',\n    450300: '桂林市',\n    450400: '梧州市',\n    450500: '北海市',\n    450600: '防城港市',\n    450700: '钦州市',\n    450800: '贵港市',\n    450900: '玉林市',\n    451000: '百色市',\n    451100: '贺州市',\n    451200: '河池市',\n    451300: '来宾市',\n    451400: '崇左市'\n  },\n  450100: {\n    450102: '兴宁区',\n    450103: '青秀区',\n    450105: '江南区',\n    450107: '西乡塘区',\n    450108: '良庆区',\n    450109: '邕宁区',\n    450110: '武鸣区',\n    450123: '隆安县',\n    450124: '马山县',\n    450125: '上林县',\n    450126: '宾阳县',\n    450127: '横县'\n  },\n  450200: {\n    450202: '城中区',\n    450203: '鱼峰区',\n    450204: '柳南区',\n    450205: '柳北区',\n    450221: '柳江区',\n    450222: '柳城县',\n    450223: '鹿寨县',\n    450224: '融安县',\n    450225: '融水苗族自治县',\n    450226: '三江侗族自治县'\n  },\n  450300: {\n    450302: '秀峰区',\n    450303: '叠彩区',\n    450304: '象山区',\n    450305: '七星区',\n    450311: '雁山区',\n    450312: '临桂区',\n    450321: '阳朔县',\n    450323: '灵川县',\n    450324: '全州县',\n    450325: '兴安县',\n    450326: '永福县',\n    450327: '灌阳县',\n    450328: '龙胜各族自治县',\n    450329: '资源县',\n    450330: '平乐县',\n    450331: '荔浦县',\n    450332: '恭城瑶族自治县'\n  },\n  450400: {\n    450403: '万秀区',\n    450405: '长洲区',\n    450406: '龙圩区',\n    450421: '苍梧县',\n    450422: '藤县',\n    450423: '蒙山县',\n    450481: '岑溪市'\n  },\n  450500: {\n    450502: '海城区',\n    450503: '银海区',\n    450512: '铁山港区',\n    450521: '合浦县'\n  },\n  450600: {\n    450602: '港口区',\n    450603: '防城区',\n    450621: '上思县',\n    450681: '东兴市'\n  },\n  450700: {\n    450702: '钦南区',\n    450703: '钦北区',\n    450721: '灵山县',\n    450722: '浦北县'\n  },\n  450800: {\n    450802: '港北区',\n    450803: '港南区',\n    450804: '覃塘区',\n    450821: '平南县',\n    450881: '桂平市'\n  },\n  450900: {\n    450902: '玉州区',\n    450903: '福绵区',\n    450921: '容县',\n    450922: '陆川县',\n    450923: '博白县',\n    450924: '兴业县',\n    450981: '北流市'\n  },\n  451000: {\n    451002: '右江区',\n    451021: '田阳县',\n    451022: '田东县',\n    451023: '平果县',\n    451024: '德保县',\n    451026: '那坡县',\n    451027: '凌云县',\n    451028: '乐业县',\n    451029: '田林县',\n    451030: '西林县',\n    451031: '隆林各族自治县',\n    451081: '靖西市'\n  },\n  451100: {\n    451102: '八步区',\n    451103: '平桂区',\n    451121: '昭平县',\n    451122: '钟山县',\n    451123: '富川瑶族自治县'\n  },\n  451200: {\n    451202: '金城江区',\n    451221: '南丹县',\n    451222: '天峨县',\n    451223: '凤山县',\n    451224: '东兰县',\n    451225: '罗城仫佬族自治县',\n    451226: '环江毛南族自治县',\n    451227: '巴马瑶族自治县',\n    451228: '都安瑶族自治县',\n    451229: '大化瑶族自治县',\n    451281: '宜州市'\n  },\n  451300: {\n    451302: '兴宾区',\n    451321: '忻城县',\n    451322: '象州县',\n    451323: '武宣县',\n    451324: '金秀瑶族自治县',\n    451381: '合山市'\n  },\n  451400: {\n    451402: '江州区',\n    451421: '扶绥县',\n    451422: '宁明县',\n    451423: '龙州县',\n    451424: '大新县',\n    451425: '天等县',\n    451481: '凭祥市'\n  },\n  460000: {\n    460100: '海口市',\n    460200: '三亚市',\n    460300: '三沙市',\n    460400: '儋州市',\n    469001: '五指山市',\n    469002: '琼海市',\n    469005: '文昌市',\n    469006: '万宁市',\n    469007: '东方市',\n    469021: '定安县',\n    469022: '屯昌县',\n    469023: '澄迈县',\n    469024: '临高县',\n    469025: '白沙黎族自治县',\n    469026: '昌江黎族自治县',\n    469027: '乐东黎族自治县',\n    469028: '陵水黎族自治县',\n    469029: '保亭黎族苗族自治县',\n    469030: '琼中黎族苗族自治县'\n  },\n  460100: {\n    460105: '秀英区',\n    460106: '龙华区',\n    460107: '琼山区',\n    460108: '美兰区'\n  },\n  460200: {\n    460202: '海棠区',\n    460203: '吉阳区',\n    460204: '天涯区',\n    460205: '崖州区'\n  },\n  460300: {\n    460321: '西沙群岛',\n    460322: '南沙群岛',\n    460323: '中沙群岛的岛礁及其海域'\n  },\n  500000: {\n    500100: '重庆市市辖区',\n    500200: '重庆市郊县'\n  },\n  500100: {\n    500101: '万州区',\n    500102: '涪陵区',\n    500103: '渝中区',\n    500104: '大渡口区',\n    500105: '江北区',\n    500106: '沙坪坝区',\n    500107: '九龙坡区',\n    500108: '南岸区',\n    500109: '北碚区',\n    500110: '綦江区',\n    500111: '大足区',\n    500112: '渝北区',\n    500113: '巴南区',\n    500114: '黔江区',\n    500115: '长寿区',\n    500116: '江津区',\n    500117: '合川区',\n    500118: '永川区',\n    500119: '南川区',\n    500120: '璧山区',\n    500151: '铜梁区',\n    500152: '潼南区',\n    500153: '荣昌区',\n    500154: '开州区',\n    500228: '梁平区',\n    500229: '城口县',\n    500230: '丰都县',\n    500231: '垫江县',\n    500232: '武隆区',\n    500233: '忠县',\n    500235: '云阳县',\n    500236: '奉节县',\n    500237: '巫山县',\n    500238: '巫溪县',\n    500240: '石柱土家族自治县',\n    500241: '秀山土家族苗族自治县',\n    500242: '酉阳土家族苗族自治县',\n    500243: '彭水苗族土家族自治县'\n  },\n  510000: {\n    510100: '成都市',\n    510300: '自贡市',\n    510400: '攀枝花市',\n    510500: '泸州市',\n    510600: '德阳市',\n    510700: '绵阳市',\n    510800: '广元市',\n    510900: '遂宁市',\n    511000: '内江市',\n    511100: '乐山市',\n    511300: '南充市',\n    511400: '眉山市',\n    511500: '宜宾市',\n    511600: '广安市',\n    511700: '达州市',\n    511800: '雅安市',\n    511900: '巴中市',\n    512000: '资阳市',\n    513200: '阿坝藏族羌族自治州',\n    513300: '甘孜藏族自治州',\n    513400: '凉山彝族自治州'\n  },\n  510100: {\n    510104: '锦江区',\n    510105: '青羊区',\n    510106: '金牛区',\n    510107: '武侯区',\n    510108: '成华区',\n    510112: '龙泉驿区',\n    510113: '青白江区',\n    510114: '新都区',\n    510115: '温江区',\n    510116: '双流区',\n    510121: '金堂县',\n    510124: '郫都区',\n    510129: '大邑县',\n    510131: '蒲江县',\n    510132: '新津县',\n    510180: '简阳市',\n    510181: '都江堰市',\n    510182: '彭州市',\n    510183: '邛崃市',\n    510184: '崇州市'\n  },\n  510300: {\n    510302: '自流井区',\n    510303: '贡井区',\n    510304: '大安区',\n    510311: '沿滩区',\n    510321: '荣县',\n    510322: '富顺县'\n  },\n  510400: {\n    510402: '东区',\n    510403: '西区',\n    510411: '仁和区',\n    510421: '米易县',\n    510422: '盐边县'\n  },\n  510500: {\n    510502: '江阳区',\n    510503: '纳溪区',\n    510504: '龙马潭区',\n    510521: '泸县',\n    510522: '合江县',\n    510524: '叙永县',\n    510525: '古蔺县'\n  },\n  510600: {\n    510603: '旌阳区',\n    510623: '中江县',\n    510626: '罗江县',\n    510681: '广汉市',\n    510682: '什邡市',\n    510683: '绵竹市'\n  },\n  510700: {\n    510703: '涪城区',\n    510704: '游仙区',\n    510705: '安州区',\n    510722: '三台县',\n    510723: '盐亭县',\n    510725: '梓潼县',\n    510726: '北川羌族自治县',\n    510727: '平武县',\n    510781: '江油市'\n  },\n  510800: {\n    510802: '利州区',\n    510811: '昭化区',\n    510812: '朝天区',\n    510821: '旺苍县',\n    510822: '青川县',\n    510823: '剑阁县',\n    510824: '苍溪县'\n  },\n  510900: {\n    510903: '船山区',\n    510904: '安居区',\n    510921: '蓬溪县',\n    510922: '射洪县',\n    510923: '大英县'\n  },\n  511000: {\n    511002: '市中区',\n    511011: '东兴区',\n    511024: '威远县',\n    511025: '资中县',\n    511028: '隆昌县'\n  },\n  511100: {\n    511102: '市中区',\n    511111: '沙湾区',\n    511112: '五通桥区',\n    511113: '金口河区',\n    511123: '犍为县',\n    511124: '井研县',\n    511126: '夹江县',\n    511129: '沐川县',\n    511132: '峨边彝族自治县',\n    511133: '马边彝族自治县',\n    511181: '峨眉山市'\n  },\n  511300: {\n    511302: '顺庆区',\n    511303: '高坪区',\n    511304: '嘉陵区',\n    511321: '南部县',\n    511322: '营山县',\n    511323: '蓬安县',\n    511324: '仪陇县',\n    511325: '西充县',\n    511381: '阆中市'\n  },\n  511400: {\n    511402: '东坡区',\n    511403: '彭山区',\n    511421: '仁寿县',\n    511423: '洪雅县',\n    511424: '丹棱县',\n    511425: '青神县'\n  },\n  511500: {\n    511502: '翠屏区',\n    511503: '南溪区',\n    511521: '宜宾县',\n    511523: '江安县',\n    511524: '长宁县',\n    511525: '高县',\n    511526: '珙县',\n    511527: '筠连县',\n    511528: '兴文县',\n    511529: '屏山县'\n  },\n  511600: {\n    511602: '广安区',\n    511603: '前锋区',\n    511621: '岳池县',\n    511622: '武胜县',\n    511623: '邻水县',\n    511681: '华蓥市'\n  },\n  511700: {\n    511702: '通川区',\n    511703: '达川区',\n    511722: '宣汉县',\n    511723: '开江县',\n    511724: '大竹县',\n    511725: '渠县',\n    511781: '万源市'\n  },\n  511800: {\n    511802: '雨城区',\n    511803: '名山区',\n    511822: '荥经县',\n    511823: '汉源县',\n    511824: '石棉县',\n    511825: '天全县',\n    511826: '芦山县',\n    511827: '宝兴县'\n  },\n  511900: {\n    511902: '巴州区',\n    511903: '恩阳区',\n    511921: '通江县',\n    511922: '南江县',\n    511923: '平昌县'\n  },\n  512000: {\n    512002: '雁江区',\n    512021: '安岳县',\n    512022: '乐至县'\n  },\n  513200: {\n    513201: '马尔康市',\n    513221: '汶川县',\n    513222: '理县',\n    513223: '茂县',\n    513224: '松潘县',\n    513225: '九寨沟县',\n    513226: '金川县',\n    513227: '小金县',\n    513228: '黑水县',\n    513230: '壤塘县',\n    513231: '阿坝县',\n    513232: '若尔盖县',\n    513233: '红原县'\n  },\n  513300: {\n    513301: '康定市',\n    513322: '泸定县',\n    513323: '丹巴县',\n    513324: '九龙县',\n    513325: '雅江县',\n    513326: '道孚县',\n    513327: '炉霍县',\n    513328: '甘孜县',\n    513329: '新龙县',\n    513330: '德格县',\n    513331: '白玉县',\n    513332: '石渠县',\n    513333: '色达县',\n    513334: '理塘县',\n    513335: '巴塘县',\n    513336: '乡城县',\n    513337: '稻城县',\n    513338: '得荣县'\n  },\n  513400: {\n    513401: '西昌市',\n    513422: '木里藏族自治县',\n    513423: '盐源县',\n    513424: '德昌县',\n    513425: '会理县',\n    513426: '会东县',\n    513427: '宁南县',\n    513428: '普格县',\n    513429: '布拖县',\n    513430: '金阳县',\n    513431: '昭觉县',\n    513432: '喜德县',\n    513433: '冕宁县',\n    513434: '越西县',\n    513435: '甘洛县',\n    513436: '美姑县',\n    513437: '雷波县'\n  },\n  520000: {\n    520100: '贵阳市',\n    520200: '六盘水市',\n    520300: '遵义市',\n    520400: '安顺市',\n    520500: '毕节市',\n    520600: '铜仁市',\n    522300: '黔西南布依族苗族自治州',\n    522600: '黔东南苗族侗族自治州',\n    522700: '黔南布依族苗族自治州'\n  },\n  520100: {\n    520102: '南明区',\n    520103: '云岩区',\n    520111: '花溪区',\n    520112: '乌当区',\n    520113: '白云区',\n    520115: '观山湖区',\n    520121: '开阳县',\n    520122: '息烽县',\n    520123: '修文县',\n    520181: '清镇市'\n  },\n  520200: {\n    520201: '钟山区',\n    520203: '六枝特区',\n    520221: '水城县',\n    520222: '盘县'\n  },\n  520300: {\n    520302: '红花岗区',\n    520303: '汇川区',\n    520304: '播州区',\n    520322: '桐梓县',\n    520323: '绥阳县',\n    520324: '正安县',\n    520325: '道真仡佬族苗族自治县',\n    520326: '务川仡佬族苗族自治县',\n    520327: '凤冈县',\n    520328: '湄潭县',\n    520329: '余庆县',\n    520330: '习水县',\n    520381: '赤水市',\n    520382: '仁怀市'\n  },\n  520400: {\n    520402: '西秀区',\n    520403: '平坝区',\n    520422: '普定县',\n    520423: '镇宁布依族苗族自治县',\n    520424: '关岭布依族苗族自治县',\n    520425: '紫云苗族布依族自治县'\n  },\n  520500: {\n    520502: '七星关区',\n    520521: '大方县',\n    520522: '黔西县',\n    520523: '金沙县',\n    520524: '织金县',\n    520525: '纳雍县',\n    520526: '威宁彝族回族苗族自治县',\n    520527: '赫章县'\n  },\n  520600: {\n    520602: '碧江区',\n    520603: '万山区',\n    520621: '江口县',\n    520622: '玉屏侗族自治县',\n    520623: '石阡县',\n    520624: '思南县',\n    520625: '印江土家族苗族自治县',\n    520626: '德江县',\n    520627: '沿河土家族自治县',\n    520628: '松桃苗族自治县'\n  },\n  522300: {\n    522301: '兴义市',\n    522322: '兴仁县',\n    522323: '普安县',\n    522324: '晴隆县',\n    522325: '贞丰县',\n    522326: '望谟县',\n    522327: '册亨县',\n    522328: '安龙县'\n  },\n  522600: {\n    522601: '凯里市',\n    522622: '黄平县',\n    522623: '施秉县',\n    522624: '三穗县',\n    522625: '镇远县',\n    522626: '岑巩县',\n    522627: '天柱县',\n    522628: '锦屏县',\n    522629: '剑河县',\n    522630: '台江县',\n    522631: '黎平县',\n    522632: '榕江县',\n    522633: '从江县',\n    522634: '雷山县',\n    522635: '麻江县',\n    522636: '丹寨县'\n  },\n  522700: {\n    522701: '都匀市',\n    522702: '福泉市',\n    522722: '荔波县',\n    522723: '贵定县',\n    522725: '瓮安县',\n    522726: '独山县',\n    522727: '平塘县',\n    522728: '罗甸县',\n    522729: '长顺县',\n    522730: '龙里县',\n    522731: '惠水县',\n    522732: '三都水族自治县'\n  },\n  530000: {\n    530100: '昆明市',\n    530300: '曲靖市',\n    530400: '玉溪市',\n    530500: '保山市',\n    530600: '昭通市',\n    530700: '丽江市',\n    530800: '普洱市',\n    530900: '临沧市',\n    532300: '楚雄彝族自治州',\n    532500: '红河哈尼族彝族自治州',\n    532600: '文山壮族苗族自治州',\n    532800: '西双版纳傣族自治州',\n    532900: '大理白族自治州',\n    533100: '德宏傣族景颇族自治州',\n    533300: '怒江傈僳族自治州',\n    533400: '迪庆藏族自治州'\n  },\n  530100: {\n    530102: '五华区',\n    530103: '盘龙区',\n    530111: '官渡区',\n    530112: '西山区',\n    530113: '东川区',\n    530114: '呈贡区',\n    530122: '晋宁区',\n    530124: '富民县',\n    530125: '宜良县',\n    530126: '石林彝族自治县',\n    530127: '嵩明县',\n    530128: '禄劝彝族苗族自治县',\n    530129: '寻甸回族彝族自治县',\n    530181: '安宁市'\n  },\n  530300: {\n    530302: '麒麟区',\n    530303: '沾益区',\n    530321: '马龙县',\n    530322: '陆良县',\n    530323: '师宗县',\n    530324: '罗平县',\n    530325: '富源县',\n    530326: '会泽县',\n    530381: '宣威市'\n  },\n  530400: {\n    530402: '红塔区',\n    530403: '江川区',\n    530422: '澄江县',\n    530423: '通海县',\n    530424: '华宁县',\n    530425: '易门县',\n    530426: '峨山彝族自治县',\n    530427: '新平彝族傣族自治县',\n    530428: '元江哈尼族彝族傣族自治县'\n  },\n  530500: {\n    530502: '隆阳区',\n    530521: '施甸县',\n    530523: '龙陵县',\n    530524: '昌宁县',\n    530581: '腾冲市'\n  },\n  530600: {\n    530602: '昭阳区',\n    530621: '鲁甸县',\n    530622: '巧家县',\n    530623: '盐津县',\n    530624: '大关县',\n    530625: '永善县',\n    530626: '绥江县',\n    530627: '镇雄县',\n    530628: '彝良县',\n    530629: '威信县',\n    530630: '水富县'\n  },\n  530700: {\n    530702: '古城区',\n    530721: '玉龙纳西族自治县',\n    530722: '永胜县',\n    530723: '华坪县',\n    530724: '宁蒗彝族自治县'\n  },\n  530800: {\n    530802: '思茅区',\n    530821: '宁洱哈尼族彝族自治县',\n    530822: '墨江哈尼族自治县',\n    530823: '景东彝族自治县',\n    530824: '景谷傣族彝族自治县',\n    530825: '镇沅彝族哈尼族拉祜族自治县',\n    530826: '江城哈尼族彝族自治县',\n    530827: '孟连傣族拉祜族佤族自治县',\n    530828: '澜沧拉祜族自治县',\n    530829: '西盟佤族自治县'\n  },\n  530900: {\n    530902: '临翔区',\n    530921: '凤庆县',\n    530922: '云县',\n    530923: '永德县',\n    530924: '镇康县',\n    530925: '双江拉祜族佤族布朗族傣族自治县',\n    530926: '耿马傣族佤族自治县',\n    530927: '沧源佤族自治县'\n  },\n  532300: {\n    532301: '楚雄市',\n    532322: '双柏县',\n    532323: '牟定县',\n    532324: '南华县',\n    532325: '姚安县',\n    532326: '大姚县',\n    532327: '永仁县',\n    532328: '元谋县',\n    532329: '武定县',\n    532331: '禄丰县'\n  },\n  532500: {\n    532501: '个旧市',\n    532502: '开远市',\n    532503: '蒙自市',\n    532504: '弥勒市',\n    532523: '屏边苗族自治县',\n    532524: '建水县',\n    532525: '石屏县',\n    532527: '泸西县',\n    532528: '元阳县',\n    532529: '红河县',\n    532530: '金平苗族瑶族傣族自治县',\n    532531: '绿春县',\n    532532: '河口瑶族自治县'\n  },\n  532600: {\n    532601: '文山市',\n    532622: '砚山县',\n    532623: '西畴县',\n    532624: '麻栗坡县',\n    532625: '马关县',\n    532626: '丘北县',\n    532627: '广南县',\n    532628: '富宁县'\n  },\n  532800: {\n    532801: '景洪市',\n    532822: '勐海县',\n    532823: '勐腊县'\n  },\n  532900: {\n    532901: '大理市',\n    532922: '漾濞彝族自治县',\n    532923: '祥云县',\n    532924: '宾川县',\n    532925: '弥渡县',\n    532926: '南涧彝族自治县',\n    532927: '巍山彝族回族自治县',\n    532928: '永平县',\n    532929: '云龙县',\n    532930: '洱源县',\n    532931: '剑川县',\n    532932: '鹤庆县'\n  },\n  533100: {\n    533102: '瑞丽市',\n    533103: '芒市',\n    533122: '梁河县',\n    533123: '盈江县',\n    533124: '陇川县'\n  },\n  533300: {\n    533301: '泸水市',\n    533323: '福贡县',\n    533324: '贡山独龙族怒族自治县',\n    533325: '兰坪白族普米族自治县'\n  },\n  533400: {\n    533401: '香格里拉市',\n    533422: '德钦县',\n    533423: '维西傈僳族自治县'\n  },\n  540000: {\n    540100: '拉萨市',\n    540200: '日喀则市',\n    540300: '昌都市',\n    540400: '林芝市',\n    540500: '山南市',\n    542400: '那曲地区',\n    542500: '阿里地区'\n  },\n  540100: {\n    540102: '城关区',\n    540103: '堆龙德庆区',\n    540121: '林周县',\n    540122: '当雄县',\n    540123: '尼木县',\n    540124: '曲水县',\n    540126: '达孜县',\n    540127: '墨竹工卡县'\n  },\n  540200: {\n    540202: '桑珠孜区',\n    540221: '南木林县',\n    540222: '江孜县',\n    540223: '定日县',\n    540224: '萨迦县',\n    540225: '拉孜县',\n    540226: '昂仁县',\n    540227: '谢通门县',\n    540228: '白朗县',\n    540229: '仁布县',\n    540230: '康马县',\n    540231: '定结县',\n    540232: '仲巴县',\n    540233: '亚东县',\n    540234: '吉隆县',\n    540235: '聂拉木县',\n    540236: '萨嘎县',\n    540237: '岗巴县'\n  },\n  540300: {\n    540302: '卡若区',\n    540321: '江达县',\n    540322: '贡觉县',\n    540323: '类乌齐县',\n    540324: '丁青县',\n    540325: '察雅县',\n    540326: '八宿县',\n    540327: '左贡县',\n    540328: '芒康县',\n    540329: '洛隆县',\n    540330: '边坝县'\n  },\n  540400: {\n    540402: '巴宜区',\n    540421: '工布江达县',\n    540422: '米林县',\n    540423: '墨脱县',\n    540424: '波密县',\n    540425: '察隅县',\n    540426: '朗县'\n  },\n  540500: {\n    540502: '乃东区',\n    540521: '扎囊县',\n    540522: '贡嘎县',\n    540523: '桑日县',\n    540524: '琼结县',\n    540525: '曲松县',\n    540526: '措美县',\n    540527: '洛扎县',\n    540528: '加查县',\n    540529: '隆子县',\n    540530: '错那县',\n    540531: '浪卡子县'\n  },\n  542400: {\n    542421: '那曲县',\n    542422: '嘉黎县',\n    542423: '比如县',\n    542424: '聂荣县',\n    542425: '安多县',\n    542426: '申扎县',\n    542427: '索县',\n    542428: '班戈县',\n    542429: '巴青县',\n    542430: '尼玛县',\n    542431: '双湖县'\n  },\n  542500: {\n    542521: '普兰县',\n    542522: '札达县',\n    542523: '噶尔县',\n    542524: '日土县',\n    542525: '革吉县',\n    542526: '改则县',\n    542527: '措勤县'\n  },\n  610000: {\n    610100: '西安市',\n    610200: '铜川市',\n    610300: '宝鸡市',\n    610400: '咸阳市',\n    610500: '渭南市',\n    610600: '延安市',\n    610700: '汉中市',\n    610800: '榆林市',\n    610900: '安康市',\n    611000: '商洛市'\n  },\n  610100: {\n    610102: '新城区',\n    610103: '碑林区',\n    610104: '莲湖区',\n    610111: '灞桥区',\n    610112: '未央区',\n    610113: '雁塔区',\n    610114: '阎良区',\n    610115: '临潼区',\n    610116: '长安区',\n    610117: '高陵区',\n    610122: '蓝田县',\n    610124: '周至县',\n    610125: '鄠邑区'\n  },\n  610200: {\n    610202: '王益区',\n    610203: '印台区',\n    610204: '耀州区',\n    610222: '宜君县'\n  },\n  610300: {\n    610302: '渭滨区',\n    610303: '金台区',\n    610304: '陈仓区',\n    610322: '凤翔县',\n    610323: '岐山县',\n    610324: '扶风县',\n    610326: '眉县',\n    610327: '陇县',\n    610328: '千阳县',\n    610329: '麟游县',\n    610330: '凤县',\n    610331: '太白县'\n  },\n  610400: {\n    610402: '秦都区',\n    610403: '杨陵区',\n    610404: '渭城区',\n    610422: '三原县',\n    610423: '泾阳县',\n    610424: '乾县',\n    610425: '礼泉县',\n    610426: '永寿县',\n    610427: '彬县',\n    610428: '长武县',\n    610429: '旬邑县',\n    610430: '淳化县',\n    610431: '武功县',\n    610481: '兴平市'\n  },\n  610500: {\n    610502: '临渭区',\n    610503: '华州区',\n    610522: '潼关县',\n    610523: '大荔县',\n    610524: '合阳县',\n    610525: '澄城县',\n    610526: '蒲城县',\n    610527: '白水县',\n    610528: '富平县',\n    610581: '韩城市',\n    610582: '华阴市'\n  },\n  610600: {\n    610602: '宝塔区',\n    610621: '延长县',\n    610622: '延川县',\n    610623: '子长县',\n    610624: '安塞区',\n    610625: '志丹县',\n    610626: '吴起县',\n    610627: '甘泉县',\n    610628: '富县',\n    610629: '洛川县',\n    610630: '宜川县',\n    610631: '黄龙县',\n    610632: '黄陵县'\n  },\n  610700: {\n    610702: '汉台区',\n    610721: '南郑县',\n    610722: '城固县',\n    610723: '洋县',\n    610724: '西乡县',\n    610725: '勉县',\n    610726: '宁强县',\n    610727: '略阳县',\n    610728: '镇巴县',\n    610729: '留坝县',\n    610730: '佛坪县'\n  },\n  610800: {\n    610802: '榆阳区',\n    610803: '横山区',\n    610821: '神木县',\n    610822: '府谷县',\n    610824: '靖边县',\n    610825: '定边县',\n    610826: '绥德县',\n    610827: '米脂县',\n    610828: '佳县',\n    610829: '吴堡县',\n    610830: '清涧县',\n    610831: '子洲县'\n  },\n  610900: {\n    610902: '汉滨区',\n    610921: '汉阴县',\n    610922: '石泉县',\n    610923: '宁陕县',\n    610924: '紫阳县',\n    610925: '岚皋县',\n    610926: '平利县',\n    610927: '镇坪县',\n    610928: '旬阳县',\n    610929: '白河县'\n  },\n  611000: {\n    611002: '商州区',\n    611021: '洛南县',\n    611022: '丹凤县',\n    611023: '商南县',\n    611024: '山阳县',\n    611025: '镇安县',\n    611026: '柞水县'\n  },\n  620000: {\n    620100: '兰州市',\n    620200: '嘉峪关市',\n    620300: '金昌市',\n    620400: '白银市',\n    620500: '天水市',\n    620600: '武威市',\n    620700: '张掖市',\n    620800: '平凉市',\n    620900: '酒泉市',\n    621000: '庆阳市',\n    621100: '定西市',\n    621200: '陇南市',\n    622900: '临夏回族自治州',\n    623000: '甘南藏族自治州'\n  },\n  620100: {\n    620102: '城关区',\n    620103: '七里河区',\n    620104: '西固区',\n    620105: '安宁区',\n    620111: '红古区',\n    620121: '永登县',\n    620122: '皋兰县',\n    620123: '榆中县'\n  },\n  620300: {\n    620302: '金川区',\n    620321: '永昌县'\n  },\n  620400: {\n    620402: '白银区',\n    620403: '平川区',\n    620421: '靖远县',\n    620422: '会宁县',\n    620423: '景泰县'\n  },\n  620500: {\n    620502: '秦州区',\n    620503: '麦积区',\n    620521: '清水县',\n    620522: '秦安县',\n    620523: '甘谷县',\n    620524: '武山县',\n    620525: '张家川回族自治县'\n  },\n  620600: {\n    620602: '凉州区',\n    620621: '民勤县',\n    620622: '古浪县',\n    620623: '天祝藏族自治县'\n  },\n  620700: {\n    620702: '甘州区',\n    620721: '肃南裕固族自治县',\n    620722: '民乐县',\n    620723: '临泽县',\n    620724: '高台县',\n    620725: '山丹县'\n  },\n  620800: {\n    620802: '崆峒区',\n    620821: '泾川县',\n    620822: '灵台县',\n    620823: '崇信县',\n    620824: '华亭县',\n    620825: '庄浪县',\n    620826: '静宁县'\n  },\n  620900: {\n    620902: '肃州区',\n    620921: '金塔县',\n    620922: '瓜州县',\n    620923: '肃北蒙古族自治县',\n    620924: '阿克塞哈萨克族自治县',\n    620981: '玉门市',\n    620982: '敦煌市'\n  },\n  621000: {\n    621002: '西峰区',\n    621021: '庆城县',\n    621022: '环县',\n    621023: '华池县',\n    621024: '合水县',\n    621025: '正宁县',\n    621026: '宁县',\n    621027: '镇原县'\n  },\n  621100: {\n    621102: '安定区',\n    621121: '通渭县',\n    621122: '陇西县',\n    621123: '渭源县',\n    621124: '临洮县',\n    621125: '漳县',\n    621126: '岷县'\n  },\n  621200: {\n    621202: '武都区',\n    621221: '成县',\n    621222: '文县',\n    621223: '宕昌县',\n    621224: '康县',\n    621225: '西和县',\n    621226: '礼县',\n    621227: '徽县',\n    621228: '两当县'\n  },\n  622900: {\n    622901: '临夏市',\n    622921: '临夏县',\n    622922: '康乐县',\n    622923: '永靖县',\n    622924: '广河县',\n    622925: '和政县',\n    622926: '东乡族自治县',\n    622927: '积石山保安族东乡族撒拉族自治县'\n  },\n  623000: {\n    623001: '合作市',\n    623021: '临潭县',\n    623022: '卓尼县',\n    623023: '舟曲县',\n    623024: '迭部县',\n    623025: '玛曲县',\n    623026: '碌曲县',\n    623027: '夏河县'\n  },\n  630000: {\n    630100: '西宁市',\n    630200: '海东市',\n    632200: '海北藏族自治州',\n    632300: '黄南藏族自治州',\n    632500: '海南藏族自治州',\n    632600: '果洛藏族自治州',\n    632700: '玉树藏族自治州',\n    632800: '海西蒙古族藏族自治州'\n  },\n  630100: {\n    630102: '城东区',\n    630103: '城中区',\n    630104: '城西区',\n    630105: '城北区',\n    630121: '大通回族土族自治县',\n    630122: '湟中县',\n    630123: '湟源县'\n  },\n  630200: {\n    630202: '乐都区',\n    630203: '平安区',\n    630222: '民和回族土族自治县',\n    630223: '互助土族自治县',\n    630224: '化隆回族自治县',\n    630225: '循化撒拉族自治县'\n  },\n  632200: {\n    632221: '门源回族自治县',\n    632222: '祁连县',\n    632223: '海晏县',\n    632224: '刚察县'\n  },\n  632300: {\n    632321: '同仁县',\n    632322: '尖扎县',\n    632323: '泽库县',\n    632324: '河南蒙古族自治县'\n  },\n  632500: {\n    632521: '共和县',\n    632522: '同德县',\n    632523: '贵德县',\n    632524: '兴海县',\n    632525: '贵南县'\n  },\n  632600: {\n    632621: '玛沁县',\n    632622: '班玛县',\n    632623: '甘德县',\n    632624: '达日县',\n    632625: '久治县',\n    632626: '玛多县'\n  },\n  632700: {\n    632701: '玉树市',\n    632722: '杂多县',\n    632723: '称多县',\n    632724: '治多县',\n    632725: '囊谦县',\n    632726: '曲麻莱县'\n  },\n  632800: {\n    632801: '格尔木市',\n    632802: '德令哈市',\n    632821: '乌兰县',\n    632822: '都兰县',\n    632823: '天峻县',\n    632825: '海西蒙古族藏族自治州直辖'\n  },\n  640000: {\n    640100: '银川市',\n    640200: '石嘴山市',\n    640300: '吴忠市',\n    640400: '固原市',\n    640500: '中卫市'\n  },\n  640100: {\n    640104: '兴庆区',\n    640105: '西夏区',\n    640106: '金凤区',\n    640121: '永宁县',\n    640122: '贺兰县',\n    640181: '灵武市'\n  },\n  640200: {\n    640202: '大武口区',\n    640205: '惠农区',\n    640221: '平罗县'\n  },\n  640300: {\n    640302: '利通区',\n    640303: '红寺堡区',\n    640323: '盐池县',\n    640324: '同心县',\n    640381: '青铜峡市'\n  },\n  640400: {\n    640402: '原州区',\n    640422: '西吉县',\n    640423: '隆德县',\n    640424: '泾源县',\n    640425: '彭阳县'\n  },\n  640500: {\n    640502: '沙坡头区',\n    640521: '中宁县',\n    640522: '海原县'\n  },\n  650000: {\n    650100: '乌鲁木齐市',\n    650200: '克拉玛依市',\n    650400: '吐鲁番市',\n    650500: '哈密市',\n    652300: '昌吉回族自治州',\n    652700: '博尔塔拉蒙古自治州',\n    652800: '巴音郭楞蒙古自治州',\n    652900: '阿克苏地区',\n    653000: '克孜勒苏柯尔克孜自治州',\n    653100: '喀什地区',\n    653200: '和田地区',\n    654000: '伊犁哈萨克自治州',\n    654200: '塔城地区',\n    654300: '阿勒泰地区',\n    659001: '石河子市',\n    659002: '阿拉尔市',\n    659003: '图木舒克市',\n    659004: '五家渠市',\n    659005: '北屯市',\n    659006: '铁门关市',\n    659007: '双河市',\n    659008: '可克达拉市',\n    659009: '昆玉市'\n  },\n  650100: {\n    650102: '天山区',\n    650103: '沙依巴克区',\n    650104: '新市区',\n    650105: '水磨沟区',\n    650106: '头屯河区',\n    650107: '达坂城区',\n    650109: '米东区',\n    650121: '乌鲁木齐县'\n  },\n  650200: {\n    650202: '独山子区',\n    650203: '克拉玛依区',\n    650204: '白碱滩区',\n    650205: '乌尔禾区'\n  },\n  650400: {\n    650402: '高昌区',\n    650421: '鄯善县',\n    650422: '托克逊县'\n  },\n  650500: {\n    650502: '伊州区',\n    650521: '巴里坤哈萨克自治县',\n    650522: '伊吾县'\n  },\n  652300: {\n    652301: '昌吉市',\n    652302: '阜康市',\n    652323: '呼图壁县',\n    652324: '玛纳斯县',\n    652325: '奇台县',\n    652327: '吉木萨尔县',\n    652328: '木垒哈萨克自治县'\n  },\n  652700: {\n    652701: '博乐市',\n    652702: '阿拉山口市',\n    652722: '精河县',\n    652723: '温泉县'\n  },\n  652800: {\n    652801: '库尔勒市',\n    652822: '轮台县',\n    652823: '尉犁县',\n    652824: '若羌县',\n    652825: '且末县',\n    652826: '焉耆回族自治县',\n    652827: '和静县',\n    652828: '和硕县',\n    652829: '博湖县'\n  },\n  652900: {\n    652901: '阿克苏市',\n    652922: '温宿县',\n    652923: '库车县',\n    652924: '沙雅县',\n    652925: '新和县',\n    652926: '拜城县',\n    652927: '乌什县',\n    652928: '阿瓦提县',\n    652929: '柯坪县'\n  },\n  653000: {\n    653001: '阿图什市',\n    653022: '阿克陶县',\n    653023: '阿合奇县',\n    653024: '乌恰县'\n  },\n  653100: {\n    653101: '喀什市',\n    653121: '疏附县',\n    653122: '疏勒县',\n    653123: '英吉沙县',\n    653124: '泽普县',\n    653125: '莎车县',\n    653126: '叶城县',\n    653127: '麦盖提县',\n    653128: '岳普湖县',\n    653129: '伽师县',\n    653130: '巴楚县',\n    653131: '塔什库尔干塔吉克自治县'\n  },\n  653200: {\n    653201: '和田市',\n    653221: '和田县',\n    653222: '墨玉县',\n    653223: '皮山县',\n    653224: '洛浦县',\n    653225: '策勒县',\n    653226: '于田县',\n    653227: '民丰县'\n  },\n  654000: {\n    654002: '伊宁市',\n    654003: '奎屯市',\n    654004: '霍尔果斯市',\n    654021: '伊宁县',\n    654022: '察布查尔锡伯自治县',\n    654023: '霍城县',\n    654024: '巩留县',\n    654025: '新源县',\n    654026: '昭苏县',\n    654027: '特克斯县',\n    654028: '尼勒克县'\n  },\n  654200: {\n    654201: '塔城市',\n    654202: '乌苏市',\n    654221: '额敏县',\n    654223: '沙湾县',\n    654224: '托里县',\n    654225: '裕民县',\n    654226: '和布克赛尔蒙古自治县'\n  },\n  654300: {\n    654301: '阿勒泰市',\n    654321: '布尔津县',\n    654322: '富蕴县',\n    654323: '福海县',\n    654324: '哈巴河县',\n    654325: '青河县',\n    654326: '吉木乃县'\n  },\n  810000: {\n    810001: '中西区',\n    810002: '湾仔区',\n    810003: '东区',\n    810004: '南区',\n    810005: '油尖旺区',\n    810006: '深水埗区',\n    810007: '九龙城区',\n    810008: '黄大仙区',\n    810009: '观塘区',\n    810010: '荃湾区',\n    810011: '屯门区',\n    810012: '元朗区',\n    810013: '北区',\n    810014: '大埔区',\n    810015: '西贡区',\n    810016: '沙田区',\n    810017: '葵青区',\n    810018: '离岛区'\n  },\n  820000: {\n    820001: '花地玛堂区',\n    820002: '花王堂区',\n    820003: '望德堂区',\n    820004: '大堂区',\n    820005: '风顺堂区',\n    820006: '嘉模堂区',\n    820007: '路凼填海区',\n    820008: '圣方济各堂区'\n  }\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar set = function set(object, property, value, receiver) {\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent !== null) {\n      set(parent, property, value, receiver);\n    }\n  } else if (\"value\" in desc && desc.writable) {\n    desc.value = value;\n  } else {\n    var setter = desc.set;\n\n    if (setter !== undefined) {\n      setter.call(receiver, value);\n    }\n  }\n\n  return value;\n};\n\nvar NAMESPACE$1 = 'distpicker';\nvar EVENT_CHANGE = 'change.' + NAMESPACE$1;\nvar DEFAULT_CODE = 100000;\nvar PROVINCE = 'province';\nvar CITY = 'city';\nvar DISTRICT = 'district';\n\nvar Distpicker = function () {\n  function Distpicker(element, options) {\n    classCallCheck(this, Distpicker);\n\n    var self = this;\n\n    self.$element = $(element);\n    self.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options);\n    self.placeholders = $.extend({}, DEFAULTS);\n    self.ready = false;\n    self.init();\n  }\n\n  createClass(Distpicker, [{\n    key: 'init',\n    value: function init() {\n      var self = this;\n      var options = self.options;\n      var $selects = self.$element.find('select');\n      var length = $selects.length;\n      var data = {};\n\n      $selects.each(function (i, select) {\n        return $.extend(data, $(select).data());\n      });\n\n      $.each([PROVINCE, CITY, DISTRICT], function (i, type) {\n        if (data[type]) {\n          options[type] = data[type];\n          self['$' + type] = $selects.filter('[data-' + type + ']');\n        } else {\n          self['$' + type] = length > i ? $selects.eq(i) : null;\n        }\n      });\n\n      self.bind();\n\n      // Reset all the selects (after event binding)\n      self.reset();\n      self.ready = true;\n    }\n  }, {\n    key: 'bind',\n    value: function bind() {\n      var self = this;\n\n      if (self.$province) {\n        self.$province.on(EVENT_CHANGE, self.onChangeProvince = $.proxy(function () {\n          self.output(CITY);\n          self.output(DISTRICT);\n        }, self));\n      }\n\n      if (self.$city) {\n        self.$city.on(EVENT_CHANGE, self.onChangeCity = $.proxy(function () {\n          return self.output(DISTRICT);\n        }, self));\n      }\n    }\n  }, {\n    key: 'unbind',\n    value: function unbind() {\n      var self = this;\n\n      if (self.$province) {\n        self.$province.off(EVENT_CHANGE, self.onChangeProvince);\n      }\n\n      if (self.$city) {\n        self.$city.off(EVENT_CHANGE, self.onChangeCity);\n      }\n    }\n  }, {\n    key: 'output',\n    value: function output(type) {\n      var self = this;\n      var options = self.options;\n      var placeholders = self.placeholders;\n      var $select = self['$' + type];\n\n      if (!$select || !$select.length) {\n        return;\n      }\n\n      var code = void 0;\n\n      switch (type) {\n        case PROVINCE:\n          code = DEFAULT_CODE;\n          break;\n\n        case CITY:\n          code = self.$province && (self.$province.find(':selected').data('code') || '');\n          break;\n\n        case DISTRICT:\n          code = self.$city && (self.$city.find(':selected').data('code') || '');\n          break;\n      }\n\n      var districts = self.getDistricts(code);\n      var value = options[type];\n      var data = [];\n      var matched = false;\n\n      if ($.isPlainObject(districts)) {\n        $.each(districts, function (i, name) {\n          var selected = name === value;\n\n          if (options.valueType === 'code') {\n            selected = i === String(value);\n          }\n\n          if (selected) {\n            matched = true;\n          }\n\n          data.push({\n            code: i,\n            name: name,\n            value: options.valueType === 'name' ? name : i,\n            selected: selected\n          });\n        });\n      }\n\n      if (!matched) {\n        var autoselect = options.autoselect || options.autoSelect;\n\n        if (data.length && (type === PROVINCE && autoselect > 0 || type === CITY && autoselect > 1 || type === DISTRICT && autoselect > 2)) {\n          data[0].selected = true;\n        }\n\n        // Save the unmatched value as a placeholder at the first output\n        if (!self.ready && value) {\n          placeholders[type] = value;\n        }\n      }\n\n      // Add placeholder option\n      if (options.placeholder) {\n        data.unshift({\n          code: '',\n          name: placeholders[type],\n          value: '',\n          selected: false\n        });\n      }\n\n      if (data.length) {\n        $select.html(self.getList(data));\n      } else {\n        $select.empty();\n      }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'getList',\n    value: function getList(data) {\n      var list = [];\n\n      $.each(data, function (i, n) {\n        var attrs = ['data-code=\"' + n.code + '\"', 'data-text=\"' + n.name + '\"', 'value=\"' + n.value + '\"'];\n\n        if (n.selected) {\n          attrs.push('selected');\n        }\n\n        list.push('<option ' + attrs.join(' ') + '>' + n.name + '</option>');\n      });\n\n      return list.join('');\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'getDistricts',\n    value: function getDistricts() {\n      var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CODE;\n\n      return DISTRICTS[code] || null;\n    }\n  }, {\n    key: 'reset',\n    value: function reset(deep) {\n      var self = this;\n\n      if (!deep) {\n        self.output(PROVINCE);\n        self.output(CITY);\n        self.output(DISTRICT);\n      } else if (self.$province) {\n        self.$province.find(':first').prop('selected', true).trigger(EVENT_CHANGE);\n      }\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      var self = this;\n\n      self.unbind();\n      self.$element.removeData(NAMESPACE$1);\n    }\n  }], [{\n    key: 'setDefaults',\n    value: function setDefaults(options) {\n      $.extend(DEFAULTS, $.isPlainObject(options) && options);\n    }\n  }]);\n  return Distpicker;\n}();\n\nvar NAMESPACE = 'distpicker';\nvar OtherDistpicker = $.fn.distpicker;\n\n$.fn.distpicker = function jQueryDistpicker(option) {\n  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  var result = void 0;\n\n  this.each(function each() {\n    var $this = $(this);\n    var data = $this.data(NAMESPACE);\n\n    if (!data) {\n      if (/destroy/.test(option)) {\n        return;\n      }\n\n      var options = $.extend({}, $this.data(), $.isPlainObject(option) && option);\n      $this.data(NAMESPACE, data = new Distpicker(this, options));\n    }\n\n    if (typeof option === 'string') {\n      var fn = data[option];\n\n      if ($.isFunction(fn)) {\n        result = fn.apply(data, args);\n      }\n    }\n  });\n\n  return typeof result !== 'undefined' ? result : this;\n};\n\n$.fn.distpicker.Constructor = Distpicker;\n$.fn.distpicker.setDefaults = Distpicker.setDefaults;\n\n$.fn.distpicker.noConflict = function noConflict() {\n  $.fn.distpicker = OtherDistpicker;\n  return this;\n};\n\n$(function () {\n  $('[data-toggle=\"distpicker\"]').distpicker();\n});\n\n})));\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/goodsManage.js",
    "content": "/**\n * Created by 文辉 on 2017/7/22.\n */\nvar activity = [];\nvar currentPage = 1;\n$(document).ready(function () {\n\n    var path = $(\"#path\").text();\n\n\n    to_page(path, 1);\n\n});\n\n/*$(document).ready(function () {\n    $(\".templatemo-edit-btn\").click(function () {\n        alert(\"asf\");\n        $(\"#update-goods\").modal({\n            backdrop:'static'\n        })\n    });\n});*/\n\n$(document).on(\"click\",\".description\",function () {\n    $(this).popover();\n});\n\n$(document).on(\"click\",\".templatemo-edit-btn\",function () {\n    $(\"#update-goods\").modal({\n        backdrop:'static'\n    });\n\n    //获取当前点击商品的数据\n    var upGoodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    var upGoodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var upGoodsPrice = $(this).parents(\"tr\").find(\"td:eq(2)\").text();\n    var upGoodsNum = $(this).parents(\"tr\").find(\"td:eq(3)\").text();\n    var upGoodsDetailCate = $(this).parents(\"tr\").find(\"td:eq(4)\").text();\n    var upGoodsDes = $(this).parents(\"tr\").find(\".description\").attr(\"data-content\");\n\n    $(\"#goodsid\").text(upGoodsid);\n    $(\"#goodsname\").val(upGoodsname);\n    $(\"#price\").val(upGoodsPrice);\n    $(\"#num\").val(upGoodsNum);\n    $(\"#detailcate\").val(upGoodsDetailCate);\n    $(\"#description\").val(upGoodsDes);\n});\n\n//修改商品信息\n$(document).on(\"click\",\"#saveUpdate\",function () {\n    var ugoodsid = $(\"#goodsid\").text();\n    var ugoodsname = $(\"#goodsname\").val();\n    var uprice = $(\"#price\").val();\n    var unum = $(\"#num\").val();\n    var udescription = $(\"#description\").val();\n    var ucategory = $(\"#category\").val();\n    var udetailcate = $(\"#detailcate\").val();\n\n    /*var option = {\n        url: '/shop/admin/goods/update/'+goodsid,\n        type:'post',\n    };\n    $(\"#update-goods\").ajaxForm(option);*/\n\n    $.ajax({\n        url:\"/shop/admin/goods/update/\",\n        type:\"POST\",\n        data:{\n            goodsid:ugoodsid,\n            goodsname:ugoodsname,\n            price:uprice,\n            num:unum,\n            description:udescription,\n            category:ucategory,\n            detailcate:udetailcate,\n        },\n        success:function(result){\n            $(\"#update-goods\").modal('hide');\n            swal(result.msg,'','success');\n            to_page('/shop',currentPage);\n        },\n        error:function(){\n            alert(\"错误！！\");\n        }\n    });\n\n    /*var goodsid = $(\"#goodsid\").text();\n    var updateForm = new FormData(document.getElementById(\"update-goods\"));\n    $.ajax({\n        url:\"/shop/admin/goods/update/\" + goodsid,\n        type:\"post\",\n        data:updateForm,\n        processData:false,\n        contentType:false,\n        success:function(result){\n            swal(result.msg,'','success');\n        },\n        error:function(){\n            alert(\"错误！！\");\n            window.clearInterval(timer);\n        }\n    });*/\n});\n\n$(document).on(\"click\",\".templatemo-delete-btn\",function () {\n    var goodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    swal({\n            title: \"确定删除\" + goodsname + \"吗？\",\n            type: \"warning\",\n            showCancelButton: true,\n            cancelButtonText:\"取消\",\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"确定删除！\",\n            closeOnConfirm: false,\n        },\n        function () {\n            /*swal(\"删除！\", \"你的虚拟文件已经被删除。\", \"success\");*/\n            $.ajax({\n                url: \"/shop/admin/goods/delete/\" + goodsid,\n                type: \"DELETE\",\n                success:function (result) {\n                    swal(result.msg, \"\",\"success\");\n                    to_page('/shop',currentPage);\n                },\n                error:function () {\n                    to_page('/shop',currentPage);\n                }\n            });\n        });\n});\n\n/*$(document).on(\"click\",\".templatemo-activity-btn\",function () {\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n\n});*/\n\nfunction showActInfo(activityId) {\n    $('#activityname').text(activity[activityId-1].activityname);\n    $('#activitydes').text(activity[activityId-1].activitydes);\n    $('#discount').text(activity[activityId-1].discount);\n    $('#fullprice').text(activity[activityId-1].fullprice);\n    $('#reduceprice').text(activity[activityId-1].reduceprice);\n    $('#fullnum').text(activity[activityId-1].fullnum);\n    $('#reducenum').text(activity[activityId-1].reducenum);\n}\n\n$(\"#activity-id\").change(function () {\n    showActInfo($(this).val());\n});\n\nfunction getActivity() {\n    $.ajax({\n        url: \"/shop/admin/activity/showjson\",\n        type: \"post\",\n        success: function (result) {\n            if(result.code==100) {\n                $(\"#activity-id\").empty();\n                activity = result.info.activity;\n                $.each(activity, function (index,item) {\n                    $(\"#activity-id\").append($(\"<option></option>\").attr(\"value\",item.activityid).append(item.activityid));\n                });\n                showActInfo(1);\n            } else {\n                alert(\"获取活动信息失败\");\n            }\n        }\n    });\n}\n\n//保存活动信息\n$(document).on(\"click\",\"#saveActivity\",function () {\n    var goodsid = $(\"#activity-goodsid\").text();\n    var activityid = $(\"#activity-id\").val();\n\n    $.ajax({\n        url:\"/shop/admin/activity/update/\",\n        type:\"POST\",\n        data:{\n            goodsid:goodsid,\n            activityid:activityid\n        },\n        success:function(result){\n            $(\"#activity-goods\").modal('hide');\n            swal(result.msg,'','success');\n            to_page('/shop', currentPage);\n        },\n        error:function(){\n            alert(\"错误！！\");\n        }\n    });\n});\n\nfunction to_page(path, page) {\n    $.ajax({\n        url: path + \"/admin/goods/showjson\",\n        data: \"page=\" + page,\n        type: \"get\",\n        success: function (result) {\n\n            //解析显示\n            build_goods_table(path, result);\n\n            //页面信息\n            build_page_info(path, result);\n\n            //分页\n            build_page_nav(path, result);\n\n            currentPage = page;\n        }\n    });\n}\n\nfunction build_goods_table(path,result) {\n    $(\"#goodsinfo tbody\").empty();\n    var goods = result.info.pageInfo.list;\n    $.each(goods, function (index,item) {\n        var goodsid = $(\"<td></td>\").append(item.goodsid);\n        var goodsname = $(\"<td></td>\").append(item.goodsname);\n        var price = $(\"<td></td>\").append(item.price);\n        var num = $(\"<td></td>\").append(item.num);\n        var detailcate = $(\"<td></td>\").append(item.detailcate);\n        var activityid = $(\"<td></td>\").append(item.activityid);\n\n        // var detailA = $('<a tabindex=\"0\" class=\"btn btn-sm description\" role=\"button\" placement=\"top\" data-toggle=\"popover\" data-trigger=\"focus\" title=\"描述\" ></a>').append(\"描述\");\n        var detailBtn = $('<button type=\"button\" class=\"description\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"top\"></button>').append(\"描述\");\n\n        detailBtn = detailBtn.attr(\"data-content\",item.description);\n\n        var detailA = $(\"<a></a>\").addClass(\"templatemo-link\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid).append(\"详情\");\n\n        var editBtn = $(\"<button></button>\").addClass(\"templatemo-edit-btn\").append(\"编辑\");\n        var deleteBtn = $(\"<button></button>\").addClass(\"templatemo-delete-btn\").append(\"删除\");\n\n        var desTd = $(\"<td hidden></td>\").append(detailBtn);\n\n        //活动按钮\n        var actBtn = $(\"<button></button>\").addClass(\"templatemo-activity-btn\").attr(\"data-actGoodsid\",item.goodsid).append(\"添加\");\n        actBtn.click(function () {\n            $(\"#activity-goods\").modal({\n                backdrop:'static'\n            });\n            $(\"#activity-goodsid\").text($(this).attr(\"data-actGoodsid\"));\n            getActivity();\n        });\n\n        var actTd = $(\"<td></td>\").append(actBtn);\n\n        var detailTd = $(\"<td></td>\").append(detailA);\n        var editTd = $(\"<td></td>\").append(editBtn);\n        var deleteTd = $(\"<td></td>\").append(deleteBtn);\n\n        $(\"<tr></tr>\").append(goodsid).append(goodsname).append(price).append(num).append(detailcate).append(activityid).append(desTd).append(detailTd).append(editTd).append(deleteTd).append(actTd).appendTo(\"#goodsinfo tbody\");\n    })\n}\n\nfunction build_page_info(path,result) {\n    $(\"#page-info-area\").empty();\n    $(\"#page-info-area\").append(\"当前第\"+ result.info.pageInfo.pageNum +\"页，总共\"+ result.info.pageInfo.pages +\"页，总共\"+ result.info.pageInfo.total +\"记录\")\n}\n\nfunction build_page_nav(path,result) {\n    $(\"#page-div-nav ul\").empty();\n    var pageUl = $(\"<ul></ul>\").addClass(\"pagination\")\n\n    var firstPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"首页\")));\n\n    var prePage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-backward\\\"></i></span>\")));\n\n    if(!result.info.pageInfo.hasPreviousPage) {\n        prePage.addClass(\"li-none\");\n    } else {\n        prePage.click(function () {\n            to_page('/shop',result.info.pageInfo.prePage);\n        });\n    }\n\n    //跳转\n    firstPage.click(function () {\n        to_page('/shop',1);\n    });\n\n    var nextPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-forward\\\"></i></span>\")));\n\n    var lastPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"末页\")));\n\n    if(!result.info.pageInfo.hasNextPage) {\n        nextPage.addClass(\"li-none\");\n    } else {\n        nextPage.click(function () {\n            to_page('/shop',result.info.pageInfo.nextPage);\n        });\n    }\n\n    lastPage.click(function () {\n        to_page('/shop',result.info.pageInfo.lastPage);\n    });\n\n    pageUl.append(firstPage).append(prePage);\n\n    $.each(result.info.pageInfo.navigatepageNums,function (index,item) {\n        var numLi = $(\"<li></li>\").append($(\"<a></a>\")\n            .append($(\"<span aria-hidden=\\\"true\\\"></span>\").append(item)));\n        if(result.info.pageInfo.pageNum === item) {\n            numLi.addClass(\"active\");\n        }\n        numLi.click(function () {\n            to_page('/shop',item);\n        });\n        pageUl.append(numLi);\n    });\n\n    pageUl.append(nextPage).append(lastPage).appendTo(\"#page-div-nav\");\n}\n\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/holder.js",
    "content": "/*!\n\nHolder - client side image placeholders\nVersion 2.9.0+f2dkw\n© 2015 Ivan Malopinsky - http://imsky.co\n\nSite:     http://holderjs.com\nIssues:   https://github.com/imsky/holder/issues\nLicense:  MIT\n\n*/\n(function (window) {\n  if (!window.document) return;\n  var document = window.document;\n\n  //https://github.com/inexorabletash/polyfill/blob/master/web.js\n    if (!document.querySelectorAll) {\n      document.querySelectorAll = function (selectors) {\n        var style = document.createElement('style'), elements = [], element;\n        document.documentElement.firstChild.appendChild(style);\n        document._qsa = [];\n\n        style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';\n        window.scrollBy(0, 0);\n        style.parentNode.removeChild(style);\n\n        while (document._qsa.length) {\n          element = document._qsa.shift();\n          element.style.removeAttribute('x-qsa');\n          elements.push(element);\n        }\n        document._qsa = null;\n        return elements;\n      };\n    }\n\n    if (!document.querySelector) {\n      document.querySelector = function (selectors) {\n        var elements = document.querySelectorAll(selectors);\n        return (elements.length) ? elements[0] : null;\n      };\n    }\n\n    if (!document.getElementsByClassName) {\n      document.getElementsByClassName = function (classNames) {\n        classNames = String(classNames).replace(/^|\\s+/g, '.');\n        return document.querySelectorAll(classNames);\n      };\n    }\n\n  //https://github.com/inexorabletash/polyfill\n  // ES5 15.2.3.14 Object.keys ( O )\n  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      if (o !== Object(o)) { throw TypeError('Object.keys called on non-object'); }\n      var ret = [], p;\n      for (p in o) {\n        if (Object.prototype.hasOwnProperty.call(o, p)) {\n          ret.push(p);\n        }\n      }\n      return ret;\n    };\n  }\n\n  // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n  // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n  if (!Array.prototype.forEach) {\n    Array.prototype.forEach = function (fun /*, thisp */) {\n      if (this === void 0 || this === null) { throw TypeError(); }\n\n      var t = Object(this);\n      var len = t.length >>> 0;\n      if (typeof fun !== \"function\") { throw TypeError(); }\n\n      var thisp = arguments[1], i;\n      for (i = 0; i < len; i++) {\n        if (i in t) {\n          fun.call(thisp, t[i], i, t);\n        }\n      }\n    };\n  }\n\n  //https://github.com/inexorabletash/polyfill/blob/master/web.js\n  (function (global) {\n    var B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    global.atob = global.atob || function (input) {\n      input = String(input);\n      var position = 0,\n          output = [],\n          buffer = 0, bits = 0, n;\n\n      input = input.replace(/\\s/g, '');\n      if ((input.length % 4) === 0) { input = input.replace(/=+$/, ''); }\n      if ((input.length % 4) === 1) { throw Error('InvalidCharacterError'); }\n      if (/[^+/0-9A-Za-z]/.test(input)) { throw Error('InvalidCharacterError'); }\n\n      while (position < input.length) {\n        n = B64_ALPHABET.indexOf(input.charAt(position));\n        buffer = (buffer << 6) | n;\n        bits += 6;\n\n        if (bits === 24) {\n          output.push(String.fromCharCode((buffer >> 16) & 0xFF));\n          output.push(String.fromCharCode((buffer >>  8) & 0xFF));\n          output.push(String.fromCharCode(buffer & 0xFF));\n          bits = 0;\n          buffer = 0;\n        }\n        position += 1;\n      }\n\n      if (bits === 12) {\n        buffer = buffer >> 4;\n        output.push(String.fromCharCode(buffer & 0xFF));\n      } else if (bits === 18) {\n        buffer = buffer >> 2;\n        output.push(String.fromCharCode((buffer >> 8) & 0xFF));\n        output.push(String.fromCharCode(buffer & 0xFF));\n      }\n\n      return output.join('');\n    };\n\n    global.btoa = global.btoa || function (input) {\n      input = String(input);\n      var position = 0,\n          out = [],\n          o1, o2, o3,\n          e1, e2, e3, e4;\n\n      if (/[^\\x00-\\xFF]/.test(input)) { throw Error('InvalidCharacterError'); }\n\n      while (position < input.length) {\n        o1 = input.charCodeAt(position++);\n        o2 = input.charCodeAt(position++);\n        o3 = input.charCodeAt(position++);\n\n        // 111111 112222 222233 333333\n        e1 = o1 >> 2;\n        e2 = ((o1 & 0x3) << 4) | (o2 >> 4);\n        e3 = ((o2 & 0xf) << 2) | (o3 >> 6);\n        e4 = o3 & 0x3f;\n\n        if (position === input.length + 2) {\n          e3 = 64; e4 = 64;\n        }\n        else if (position === input.length + 1) {\n          e4 = 64;\n        }\n\n        out.push(B64_ALPHABET.charAt(e1),\n                 B64_ALPHABET.charAt(e2),\n                 B64_ALPHABET.charAt(e3),\n                 B64_ALPHABET.charAt(e4));\n      }\n\n      return out.join('');\n    };\n  }(window));\n\n  //https://gist.github.com/jimeh/332357\n  if (!Object.prototype.hasOwnProperty){\n      /*jshint -W001, -W103 */\n      Object.prototype.hasOwnProperty = function(prop) {\n      var proto = this.__proto__ || this.constructor.prototype;\n      return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);\n    };\n      /*jshint +W001, +W103 */\n  }\n\n  // @license http://opensource.org/licenses/MIT\n  // copyright Paul Irish 2015\n\n\n  // Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill\n  //   github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js\n  // as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values\n\n  // if you want values similar to what you'd get with real perf.now, place this towards the head of the page\n  // but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed\n\n\n  (function(){\n\n    if ('performance' in window === false) {\n        window.performance = {};\n    }\n    \n    Date.now = (Date.now || function () {  // thanks IE8\n      return new Date().getTime();\n    });\n\n    if ('now' in window.performance === false){\n      \n      var nowOffset = Date.now();\n      \n      if (performance.timing && performance.timing.navigationStart){\n        nowOffset = performance.timing.navigationStart;\n      }\n\n      window.performance.now = function now(){\n        return Date.now() - nowOffset;\n      };\n    }\n\n  })();\n\n  //requestAnimationFrame polyfill for older Firefox/Chrome versions\n  if (!window.requestAnimationFrame) {\n    if (window.webkitRequestAnimationFrame) {\n    //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-webkit.js\n    (function (global) {\n      // window.requestAnimationFrame\n      global.requestAnimationFrame = function (callback) {\n        return webkitRequestAnimationFrame(function () {\n          callback(global.performance.now());\n        });\n      };\n\n      // window.cancelAnimationFrame\n      global.cancelAnimationFrame = webkitCancelAnimationFrame;\n    }(window));\n    } else if (window.mozRequestAnimationFrame) {\n      //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-moz.js\n    (function (global) {\n      // window.requestAnimationFrame\n      global.requestAnimationFrame = function (callback) {\n        return mozRequestAnimationFrame(function () {\n          callback(global.performance.now());\n        });\n      };\n\n      // window.cancelAnimationFrame\n      global.cancelAnimationFrame = mozCancelAnimationFrame;\n    }(window));\n    } else {\n    (function (global) {\n      global.requestAnimationFrame = function (callback) {\n      return global.setTimeout(callback, 1000 / 60);\n      };\n\n      global.cancelAnimationFrame = global.clearTimeout;\n    })(window);\n    }\n  }\n})(this);\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Holder\"] = factory();\n\telse\n\t\troot[\"Holder\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*\n\tHolder.js - client side image placeholders\n\t(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n\t*/\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/*\n\tHolder.js - client side image placeholders\n\t(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n\t*/\n\n\t//Libraries and functions\n\tvar onDomReady = __webpack_require__(2);\n\tvar querystring = __webpack_require__(3);\n\n\tvar SceneGraph = __webpack_require__(6);\n\tvar utils = __webpack_require__(7);\n\tvar SVG = __webpack_require__(8);\n\tvar DOM = __webpack_require__(9);\n\tvar Color = __webpack_require__(10);\n\tvar constants = __webpack_require__(11);\n\n\tvar svgRenderer = __webpack_require__(12);\n\tvar sgCanvasRenderer = __webpack_require__(15);\n\n\tvar extend = utils.extend;\n\tvar dimensionCheck = utils.dimensionCheck;\n\n\t//Constants and definitions\n\tvar SVG_NS = constants.svg_ns;\n\n\tvar Holder = {\n\t    version: constants.version,\n\n\t    /**\n\t     * Adds a theme to default settings\n\t     *\n\t     * @param {string} name Theme name\n\t     * @param {Object} theme Theme object, with foreground, background, size, font, and fontweight properties.\n\t     */\n\t    addTheme: function(name, theme) {\n\t        name != null && theme != null && (App.settings.themes[name] = theme);\n\t        delete App.vars.cache.themeKeys;\n\t        return this;\n\t    },\n\n\t    /**\n\t     * Appends a placeholder to an element\n\t     *\n\t     * @param {string} src Placeholder URL string\n\t     * @param el A selector or a reference to a DOM node\n\t     */\n\t    addImage: function(src, el) {\n\t        //todo: use jquery fallback if available for all QSA references\n\t        var nodes = DOM.getNodeArray(el);\n\t        nodes.forEach(function (node) {\n\t            var img = DOM.newEl('img');\n\t            var domProps = {};\n\t            domProps[App.setup.dataAttr] = src;\n\t            DOM.setAttr(img, domProps);\n\t            node.appendChild(img);\n\t        });\n\t        return this;\n\t    },\n\n\t    /**\n\t     * Sets whether or not an image is updated on resize.\n\t     * If an image is set to be updated, it is immediately rendered.\n\t     *\n\t     * @param {Object} el Image DOM element\n\t     * @param {Boolean} value Resizable update flag value\n\t     */\n\t    setResizeUpdate: function(el, value) {\n\t        if (el.holderData) {\n\t            el.holderData.resizeUpdate = !!value;\n\t            if (el.holderData.resizeUpdate) {\n\t                updateResizableElements(el);\n\t            }\n\t        }\n\t    },\n\n\t    /**\n\t     * Runs Holder with options. By default runs Holder on all images with \"holder.js\" in their source attributes.\n\t     *\n\t     * @param {Object} userOptions Options object, can contain domain, themes, images, and bgnodes properties\n\t     */\n\t    run: function(userOptions) {\n\t        //todo: split processing into separate queues\n\t        userOptions = userOptions || {};\n\t        var engineSettings = {};\n\t        var options = extend(App.settings, userOptions);\n\n\t        App.vars.preempted = true;\n\t        App.vars.dataAttr = options.dataAttr || App.setup.dataAttr;\n\n\t        engineSettings.renderer = options.renderer ? options.renderer : App.setup.renderer;\n\t        if (App.setup.renderers.join(',').indexOf(engineSettings.renderer) === -1) {\n\t            engineSettings.renderer = App.setup.supportsSVG ? 'svg' : (App.setup.supportsCanvas ? 'canvas' : 'html');\n\t        }\n\n\t        var images = DOM.getNodeArray(options.images);\n\t        var bgnodes = DOM.getNodeArray(options.bgnodes);\n\t        var stylenodes = DOM.getNodeArray(options.stylenodes);\n\t        var objects = DOM.getNodeArray(options.objects);\n\n\t        engineSettings.stylesheets = [];\n\t        engineSettings.svgXMLStylesheet = true;\n\t        engineSettings.noFontFallback = options.noFontFallback ? options.noFontFallback : false;\n\n\t        stylenodes.forEach(function (styleNode) {\n\t            if (styleNode.attributes.rel && styleNode.attributes.href && styleNode.attributes.rel.value == 'stylesheet') {\n\t                var href = styleNode.attributes.href.value;\n\t                //todo: write isomorphic relative-to-absolute URL function\n\t                var proxyLink = DOM.newEl('a');\n\t                proxyLink.href = href;\n\t                var stylesheetURL = proxyLink.protocol + '//' + proxyLink.host + proxyLink.pathname + proxyLink.search;\n\t                engineSettings.stylesheets.push(stylesheetURL);\n\t            }\n\t        });\n\n\t        bgnodes.forEach(function (bgNode) {\n\t            //Skip processing background nodes if getComputedStyle is unavailable, since only modern browsers would be able to use canvas or SVG to render to background\n\t            if (!global.getComputedStyle) return;\n\t            var backgroundImage = global.getComputedStyle(bgNode, null).getPropertyValue('background-image');\n\t            var dataBackgroundImage = bgNode.getAttribute('data-background-src');\n\t            var rawURL = dataBackgroundImage || backgroundImage;\n\n\t            var holderURL = null;\n\t            var holderString = options.domain + '/';\n\t            var holderStringIndex = rawURL.indexOf(holderString);\n\n\t            if (holderStringIndex === 0) {\n\t                holderURL = rawURL;\n\t            } else if (holderStringIndex === 1 && rawURL[0] === '?') {\n\t                holderURL = rawURL.slice(1);\n\t            } else {\n\t                var fragment = rawURL.substr(holderStringIndex).match(/([^\\\"]*)\"?\\)/);\n\t                if (fragment !== null) {\n\t                    holderURL = fragment[1];\n\t                } else if (rawURL.indexOf('url(') === 0) {\n\t                    throw 'Holder: unable to parse background URL: ' + rawURL;\n\t                }\n\t            }\n\n\t            if (holderURL != null) {\n\t                var holderFlags = parseURL(holderURL, options);\n\t                if (holderFlags) {\n\t                    prepareDOMElement({\n\t                        mode: 'background',\n\t                        el: bgNode,\n\t                        flags: holderFlags,\n\t                        engineSettings: engineSettings\n\t                    });\n\t                }\n\t            }\n\t        });\n\n\t        objects.forEach(function (object) {\n\t            var objectAttr = {};\n\n\t            try {\n\t                objectAttr.data = object.getAttribute('data');\n\t                objectAttr.dataSrc = object.getAttribute(App.vars.dataAttr);\n\t            } catch (e) {}\n\n\t            var objectHasSrcURL = objectAttr.data != null && objectAttr.data.indexOf(options.domain) === 0;\n\t            var objectHasDataSrcURL = objectAttr.dataSrc != null && objectAttr.dataSrc.indexOf(options.domain) === 0;\n\n\t            if (objectHasSrcURL) {\n\t                prepareImageElement(options, engineSettings, objectAttr.data, object);\n\t            } else if (objectHasDataSrcURL) {\n\t                prepareImageElement(options, engineSettings, objectAttr.dataSrc, object);\n\t            }\n\t        });\n\n\t        images.forEach(function (image) {\n\t            var imageAttr = {};\n\n\t            try {\n\t                imageAttr.src = image.getAttribute('src');\n\t                imageAttr.dataSrc = image.getAttribute(App.vars.dataAttr);\n\t                imageAttr.rendered = image.getAttribute('data-holder-rendered');\n\t            } catch (e) {}\n\n\t            var imageHasSrc = imageAttr.src != null;\n\t            var imageHasDataSrcURL = imageAttr.dataSrc != null && imageAttr.dataSrc.indexOf(options.domain) === 0;\n\t            var imageRendered = imageAttr.rendered != null && imageAttr.rendered == 'true';\n\n\t            if (imageHasSrc) {\n\t                if (imageAttr.src.indexOf(options.domain) === 0) {\n\t                    prepareImageElement(options, engineSettings, imageAttr.src, image);\n\t                } else if (imageHasDataSrcURL) {\n\t                    //Image has a valid data-src and an invalid src\n\t                    if (imageRendered) {\n\t                        //If the placeholder has already been render, re-render it\n\t                        prepareImageElement(options, engineSettings, imageAttr.dataSrc, image);\n\t                    } else {\n\t                        //If the placeholder has not been rendered, check if the image exists and render a fallback if it doesn't\n\t                        (function(src, options, engineSettings, dataSrc, image) {\n\t                            utils.imageExists(src, function(exists) {\n\t                                if (!exists) {\n\t                                    prepareImageElement(options, engineSettings, dataSrc, image);\n\t                                }\n\t                            });\n\t                        })(imageAttr.src, options, engineSettings, imageAttr.dataSrc, image);\n\t                    }\n\t                }\n\t            } else if (imageHasDataSrcURL) {\n\t                prepareImageElement(options, engineSettings, imageAttr.dataSrc, image);\n\t            }\n\t        });\n\n\t        return this;\n\t    }\n\t};\n\n\tvar App = {\n\t    settings: {\n\t        domain: 'holder.js',\n\t        images: 'img',\n\t        objects: 'object',\n\t        bgnodes: 'body .holderjs',\n\t        stylenodes: 'head link.holderjs',\n\t        themes: {\n\t            'gray': {\n\t                bg: '#EEEEEE',\n\t                fg: '#AAAAAA'\n\t            },\n\t            'social': {\n\t                bg: '#3a5a97',\n\t                fg: '#FFFFFF'\n\t            },\n\t            'industrial': {\n\t                bg: '#434A52',\n\t                fg: '#C2F200'\n\t            },\n\t            'sky': {\n\t                bg: '#0D8FDB',\n\t                fg: '#FFFFFF'\n\t            },\n\t            'vine': {\n\t                bg: '#39DBAC',\n\t                fg: '#1E292C'\n\t            },\n\t            'lava': {\n\t                bg: '#F8591A',\n\t                fg: '#1C2846'\n\t            }\n\t        }\n\t    },\n\t    defaults: {\n\t        size: 10,\n\t        units: 'pt',\n\t        scale: 1 / 16\n\t    }\n\t};\n\n\t/**\n\t * Processes provided source attribute and sets up the appropriate rendering workflow\n\t *\n\t * @private\n\t * @param options Instance options from Holder.run\n\t * @param renderSettings Instance configuration\n\t * @param src Image URL\n\t * @param el Image DOM element\n\t */\n\tfunction prepareImageElement(options, engineSettings, src, el) {\n\t    var holderFlags = parseURL(src.substr(src.lastIndexOf(options.domain)), options);\n\t    if (holderFlags) {\n\t        prepareDOMElement({\n\t            mode: null,\n\t            el: el,\n\t            flags: holderFlags,\n\t            engineSettings: engineSettings\n\t        });\n\t    }\n\t}\n\n\t/**\n\t * Processes a Holder URL and extracts configuration from query string\n\t *\n\t * @private\n\t * @param url URL\n\t * @param instanceOptions Instance options from Holder.run\n\t */\n\tfunction parseURL(url, instanceOptions) {\n\t    var holder = {\n\t        theme: extend(App.settings.themes.gray, null),\n\t        stylesheets: instanceOptions.stylesheets,\n\t        instanceOptions: instanceOptions\n\t    };\n\n\t    var parts = url.split('?');\n\t    var basics = parts[0].split('/');\n\n\t    holder.holderURL = url;\n\n\t    var dimensions = basics[1];\n\t    var dimensionData = dimensions.match(/([\\d]+p?)x([\\d]+p?)/);\n\n\t    if (!dimensionData) return false;\n\n\t    holder.fluid = dimensions.indexOf('p') !== -1;\n\n\t    holder.dimensions = {\n\t        width: dimensionData[1].replace('p', '%'),\n\t        height: dimensionData[2].replace('p', '%')\n\t    };\n\n\t    if (parts.length === 2) {\n\t        var options = querystring.parse(parts[1]);\n\n\t        // Colors\n\n\t        if (options.bg) {\n\t            holder.theme.bg = utils.parseColor(options.bg);\n\t        }\n\n\t        if (options.fg) {\n\t            holder.theme.fg = utils.parseColor(options.fg);\n\t        }\n\n\t        //todo: add automatic foreground to themes without foreground\n\t        if (options.bg && !options.fg) {\n\t            holder.autoFg = true;\n\t        }\n\n\t        if (options.theme && holder.instanceOptions.themes.hasOwnProperty(options.theme)) {\n\t            holder.theme = extend(holder.instanceOptions.themes[options.theme], null);\n\t        }\n\n\t        // Text\n\n\t        if (options.text) {\n\t            holder.text = options.text;\n\t        }\n\n\t        if (options.textmode) {\n\t            holder.textmode = options.textmode;\n\t        }\n\n\t        if (options.size) {\n\t            holder.size = options.size;\n\t        }\n\n\t        if (options.font) {\n\t            holder.font = options.font;\n\t        }\n\n\t        if (options.align) {\n\t            holder.align = options.align;\n\t        }\n\n\t        if (options.lineWrap) {\n\t            holder.lineWrap = options.lineWrap;\n\t        }\n\n\t        holder.nowrap = utils.truthy(options.nowrap);\n\n\t        // Miscellaneous\n\n\t        holder.auto = utils.truthy(options.auto);\n\n\t        holder.outline = utils.truthy(options.outline);\n\n\t        if (utils.truthy(options.random)) {\n\t            App.vars.cache.themeKeys = App.vars.cache.themeKeys || Object.keys(holder.instanceOptions.themes);\n\t            var _theme = App.vars.cache.themeKeys[0 | Math.random() * App.vars.cache.themeKeys.length];\n\t            holder.theme = extend(holder.instanceOptions.themes[_theme], null);\n\t        }\n\t    }\n\n\t    return holder;\n\t}\n\n\t/**\n\t * Modifies the DOM to fit placeholders and sets up resizable image callbacks (for fluid and automatically sized placeholders)\n\t *\n\t * @private\n\t * @param settings DOM prep settings\n\t */\n\tfunction prepareDOMElement(prepSettings) {\n\t    var mode = prepSettings.mode;\n\t    var el = prepSettings.el;\n\t    var flags = prepSettings.flags;\n\t    var _engineSettings = prepSettings.engineSettings;\n\t    var dimensions = flags.dimensions,\n\t        theme = flags.theme;\n\t    var dimensionsCaption = dimensions.width + 'x' + dimensions.height;\n\t    mode = mode == null ? (flags.fluid ? 'fluid' : 'image') : mode;\n\t    var holderTemplateRe = /holder_([a-z]+)/g;\n\t    var dimensionsInText = false;\n\n\t    if (flags.text != null) {\n\t        theme.text = flags.text;\n\n\t        //<object> SVG embedding doesn't parse Unicode properly\n\t        if (el.nodeName.toLowerCase() === 'object') {\n\t            var textLines = theme.text.split('\\\\n');\n\t            for (var k = 0; k < textLines.length; k++) {\n\t                textLines[k] = utils.encodeHtmlEntity(textLines[k]);\n\t            }\n\t            theme.text = textLines.join('\\\\n');\n\t        }\n\t    }\n\n\t    if (theme.text) {\n\t        var holderTemplateMatches = theme.text.match(holderTemplateRe);\n\n\t        if (holderTemplateMatches !== null) {\n\t            //todo: optimize template replacement\n\t            holderTemplateMatches.forEach(function (match) {\n\t                if (match === 'holder_dimensions') {\n\t                    theme.text = theme.text.replace(match, dimensionsCaption);\n\t                }\n\t            });\n\t        }\n\t    }\n\n\t    var holderURL = flags.holderURL;\n\t    var engineSettings = extend(_engineSettings, null);\n\n\t    if (flags.font) {\n\t        /*\n\t        If external fonts are used in a <img> placeholder rendered with SVG, Holder falls back to canvas.\n\n\t        This is done because Firefox and Chrome disallow embedded SVGs from referencing external assets.\n\t        The workaround is either to change the placeholder tag from <img> to <object> or to use the canvas renderer.\n\t        */\n\t        theme.font = flags.font;\n\t        if (!engineSettings.noFontFallback && el.nodeName.toLowerCase() === 'img' && App.setup.supportsCanvas && engineSettings.renderer === 'svg') {\n\t            engineSettings = extend(engineSettings, {\n\t                renderer: 'canvas'\n\t            });\n\t        }\n\t    }\n\n\t    //Chrome and Opera require a quick 10ms re-render if web fonts are used with canvas\n\t    if (flags.font && engineSettings.renderer == 'canvas') {\n\t        engineSettings.reRender = true;\n\t    }\n\n\t    if (mode == 'background') {\n\t        if (el.getAttribute('data-background-src') == null) {\n\t            DOM.setAttr(el, {\n\t                'data-background-src': holderURL\n\t            });\n\t        }\n\t    } else {\n\t        var domProps = {};\n\t        domProps[App.vars.dataAttr] = holderURL;\n\t        DOM.setAttr(el, domProps);\n\t    }\n\n\t    flags.theme = theme;\n\n\t    //todo consider using all renderSettings in holderData\n\t    el.holderData = {\n\t        flags: flags,\n\t        engineSettings: engineSettings\n\t    };\n\n\t    if (mode == 'image' || mode == 'fluid') {\n\t        DOM.setAttr(el, {\n\t            'alt': theme.text ? (dimensionsInText ? theme.text : theme.text + ' [' + dimensionsCaption + ']') : dimensionsCaption\n\t        });\n\t    }\n\n\t    var renderSettings = {\n\t        mode: mode,\n\t        el: el,\n\t        holderSettings: {\n\t            dimensions: dimensions,\n\t            theme: theme,\n\t            flags: flags\n\t        },\n\t        engineSettings: engineSettings\n\t    };\n\n\t    if (mode == 'image') {\n\t        if (!flags.auto) {\n\t            el.style.width = dimensions.width + 'px';\n\t            el.style.height = dimensions.height + 'px';\n\t        }\n\n\t        if (engineSettings.renderer == 'html') {\n\t            el.style.backgroundColor = theme.background;\n\t        } else {\n\t            render(renderSettings);\n\n\t            if (flags.textmode == 'exact') {\n\t                el.holderData.resizeUpdate = true;\n\t                App.vars.resizableImages.push(el);\n\t                updateResizableElements(el);\n\t            }\n\t        }\n\t    } else if (mode == 'background' && engineSettings.renderer != 'html') {\n\t        render(renderSettings);\n\t    } else if (mode == 'fluid') {\n\t        el.holderData.resizeUpdate = true;\n\n\t        if (dimensions.height.slice(-1) == '%') {\n\t            el.style.height = dimensions.height;\n\t        } else if (flags.auto == null || !flags.auto) {\n\t            el.style.height = dimensions.height + 'px';\n\t        }\n\t        if (dimensions.width.slice(-1) == '%') {\n\t            el.style.width = dimensions.width;\n\t        } else if (flags.auto == null || !flags.auto) {\n\t            el.style.width = dimensions.width + 'px';\n\t        }\n\t        if (el.style.display == 'inline' || el.style.display === '' || el.style.display == 'none') {\n\t            el.style.display = 'block';\n\t        }\n\n\t        setInitialDimensions(el);\n\n\t        if (engineSettings.renderer == 'html') {\n\t            el.style.backgroundColor = theme.background;\n\t        } else {\n\t            App.vars.resizableImages.push(el);\n\t            updateResizableElements(el);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Core function that takes output from renderers and sets it as the source or background-image of the target element\n\t *\n\t * @private\n\t * @param renderSettings Renderer settings\n\t */\n\tfunction render(renderSettings) {\n\t    var image = null;\n\t    var mode = renderSettings.mode;\n\t    var el = renderSettings.el;\n\t    var holderSettings = renderSettings.holderSettings;\n\t    var engineSettings = renderSettings.engineSettings;\n\n\t    switch (engineSettings.renderer) {\n\t        case 'svg':\n\t            if (!App.setup.supportsSVG) return;\n\t            break;\n\t        case 'canvas':\n\t            if (!App.setup.supportsCanvas) return;\n\t            break;\n\t        default:\n\t            return;\n\t    }\n\n\t    //todo: move generation of scene up to flag generation to reduce extra object creation\n\t    var scene = {\n\t        width: holderSettings.dimensions.width,\n\t        height: holderSettings.dimensions.height,\n\t        theme: holderSettings.theme,\n\t        flags: holderSettings.flags\n\t    };\n\n\t    var sceneGraph = buildSceneGraph(scene);\n\n\t    function getRenderedImage() {\n\t        var image = null;\n\t        switch (engineSettings.renderer) {\n\t            case 'canvas':\n\t                image = sgCanvasRenderer(sceneGraph, renderSettings);\n\t                break;\n\t            case 'svg':\n\t                image = svgRenderer(sceneGraph, renderSettings);\n\t                break;\n\t            default:\n\t                throw 'Holder: invalid renderer: ' + engineSettings.renderer;\n\t        }\n\n\t        return image;\n\t    }\n\n\t    image = getRenderedImage();\n\n\t    if (image == null) {\n\t        throw 'Holder: couldn\\'t render placeholder';\n\t    }\n\n\t    //todo: add <object> canvas rendering\n\t    if (mode == 'background') {\n\t        el.style.backgroundImage = 'url(' + image + ')';\n\t        el.style.backgroundSize = scene.width + 'px ' + scene.height + 'px';\n\t    } else {\n\t        if (el.nodeName.toLowerCase() === 'img') {\n\t            DOM.setAttr(el, {\n\t                'src': image\n\t            });\n\t        } else if (el.nodeName.toLowerCase() === 'object') {\n\t            DOM.setAttr(el, {\n\t                'data': image,\n\t                'type': 'image/svg+xml'\n\t            });\n\t        }\n\t        if (engineSettings.reRender) {\n\t            global.setTimeout(function () {\n\t                var image = getRenderedImage();\n\t                if (image == null) {\n\t                    throw 'Holder: couldn\\'t render placeholder';\n\t                }\n\t                //todo: refactor this code into a function\n\t                if (el.nodeName.toLowerCase() === 'img') {\n\t                    DOM.setAttr(el, {\n\t                        'src': image\n\t                    });\n\t                } else if (el.nodeName.toLowerCase() === 'object') {\n\t                    DOM.setAttr(el, {\n\t                        'data': image,\n\t                        'type': 'image/svg+xml'\n\t                    });\n\t                }\n\t            }, 150);\n\t        }\n\t    }\n\t    //todo: account for re-rendering\n\t    DOM.setAttr(el, {\n\t        'data-holder-rendered': true\n\t    });\n\t}\n\n\t/**\n\t * Core function that takes a Holder scene description and builds a scene graph\n\t *\n\t * @private\n\t * @param scene Holder scene object\n\t */\n\t//todo: make this function reusable\n\t//todo: merge app defaults and setup properties into the scene argument\n\tfunction buildSceneGraph(scene) {\n\t    var fontSize = App.defaults.size;\n\t    if (parseFloat(scene.theme.size)) {\n\t        fontSize = scene.theme.size;\n\t    } else if (parseFloat(scene.flags.size)) {\n\t        fontSize = scene.flags.size;\n\t    }\n\n\t    scene.font = {\n\t        family: scene.theme.font ? scene.theme.font : 'Arial, Helvetica, Open Sans, sans-serif',\n\t        size: textSize(scene.width, scene.height, fontSize, App.defaults.scale),\n\t        units: scene.theme.units ? scene.theme.units : App.defaults.units,\n\t        weight: scene.theme.fontweight ? scene.theme.fontweight : 'bold'\n\t    };\n\n\t    scene.text = scene.theme.text || Math.floor(scene.width) + 'x' + Math.floor(scene.height);\n\n\t    scene.noWrap = scene.theme.nowrap || scene.flags.nowrap;\n\n\t    scene.align = scene.theme.align || scene.flags.align || 'center';\n\n\t    switch (scene.flags.textmode) {\n\t        case 'literal':\n\t            scene.text = scene.flags.dimensions.width + 'x' + scene.flags.dimensions.height;\n\t            break;\n\t        case 'exact':\n\t            if (!scene.flags.exactDimensions) break;\n\t            scene.text = Math.floor(scene.flags.exactDimensions.width) + 'x' + Math.floor(scene.flags.exactDimensions.height);\n\t            break;\n\t    }\n\n\t    var lineWrap = scene.flags.lineWrap || App.setup.lineWrapRatio;\n\t    var sceneMargin = scene.width * lineWrap;\n\t    var maxLineWidth = sceneMargin;\n\n\t    var sceneGraph = new SceneGraph({\n\t        width: scene.width,\n\t        height: scene.height\n\t    });\n\n\t    var Shape = sceneGraph.Shape;\n\n\t    var holderBg = new Shape.Rect('holderBg', {\n\t        fill: scene.theme.bg\n\t    });\n\n\t    holderBg.resize(scene.width, scene.height);\n\t    sceneGraph.root.add(holderBg);\n\n\t    if (scene.flags.outline) {\n\t        var outlineColor = new Color(holderBg.properties.fill);\n\t        outlineColor = outlineColor.lighten(outlineColor.lighterThan('7f7f7f') ? -0.1 : 0.1);\n\t        holderBg.properties.outline = {\n\t            fill: outlineColor.toHex(true),\n\t            width: 2\n\t        };\n\t    }\n\n\t    var holderTextColor = scene.theme.fg;\n\n\t    if (scene.flags.autoFg) {\n\t        var holderBgColor = new Color(holderBg.properties.fill);\n\t        var lightColor = new Color('fff');\n\t        var darkColor = new Color('000', {\n\t            'alpha': 0.285714\n\t        });\n\n\t        holderTextColor = holderBgColor.blendAlpha(holderBgColor.lighterThan('7f7f7f') ? darkColor : lightColor).toHex(true);\n\t    }\n\n\t    var holderTextGroup = new Shape.Group('holderTextGroup', {\n\t        text: scene.text,\n\t        align: scene.align,\n\t        font: scene.font,\n\t        fill: holderTextColor\n\t    });\n\n\t    holderTextGroup.moveTo(null, null, 1);\n\t    sceneGraph.root.add(holderTextGroup);\n\n\t    var tpdata = holderTextGroup.textPositionData = stagingRenderer(sceneGraph);\n\t    if (!tpdata) {\n\t        throw 'Holder: staging fallback not supported yet.';\n\t    }\n\t    holderTextGroup.properties.leading = tpdata.boundingBox.height;\n\n\t    var textNode = null;\n\t    var line = null;\n\n\t    function finalizeLine(parent, line, width, height) {\n\t        line.width = width;\n\t        line.height = height;\n\t        parent.width = Math.max(parent.width, line.width);\n\t        parent.height += line.height;\n\t    }\n\n\t    if (tpdata.lineCount > 1) {\n\t        var offsetX = 0;\n\t        var offsetY = 0;\n\t        var lineIndex = 0;\n\t        var lineKey;\n\t        line = new Shape.Group('line' + lineIndex);\n\n\t        //Double margin so that left/right-aligned next is not flush with edge of image\n\t        if (scene.align === 'left' || scene.align === 'right') {\n\t            maxLineWidth = scene.width * (1 - (1 - lineWrap) * 2);\n\t        }\n\n\t        for (var i = 0; i < tpdata.words.length; i++) {\n\t            var word = tpdata.words[i];\n\t            textNode = new Shape.Text(word.text);\n\t            var newline = word.text == '\\\\n';\n\t            if (!scene.noWrap && (offsetX + word.width >= maxLineWidth || newline === true)) {\n\t                finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);\n\t                holderTextGroup.add(line);\n\t                offsetX = 0;\n\t                offsetY += holderTextGroup.properties.leading;\n\t                lineIndex += 1;\n\t                line = new Shape.Group('line' + lineIndex);\n\t                line.y = offsetY;\n\t            }\n\t            if (newline === true) {\n\t                continue;\n\t            }\n\t            textNode.moveTo(offsetX, 0);\n\t            offsetX += tpdata.spaceWidth + word.width;\n\t            line.add(textNode);\n\t        }\n\n\t        finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);\n\t        holderTextGroup.add(line);\n\n\t        if (scene.align === 'left') {\n\t            holderTextGroup.moveTo(scene.width - sceneMargin, null, null);\n\t        } else if (scene.align === 'right') {\n\t            for (lineKey in holderTextGroup.children) {\n\t                line = holderTextGroup.children[lineKey];\n\t                line.moveTo(scene.width - line.width, null, null);\n\t            }\n\n\t            holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);\n\t        } else {\n\t            for (lineKey in holderTextGroup.children) {\n\t                line = holderTextGroup.children[lineKey];\n\t                line.moveTo((holderTextGroup.width - line.width) / 2, null, null);\n\t            }\n\n\t            holderTextGroup.moveTo((scene.width - holderTextGroup.width) / 2, null, null);\n\t        }\n\n\t        holderTextGroup.moveTo(null, (scene.height - holderTextGroup.height) / 2, null);\n\n\t        //If the text exceeds vertical space, move it down so the first line is visible\n\t        if ((scene.height - holderTextGroup.height) / 2 < 0) {\n\t            holderTextGroup.moveTo(null, 0, null);\n\t        }\n\t    } else {\n\t        textNode = new Shape.Text(scene.text);\n\t        line = new Shape.Group('line0');\n\t        line.add(textNode);\n\t        holderTextGroup.add(line);\n\n\t        if (scene.align === 'left') {\n\t            holderTextGroup.moveTo(scene.width - sceneMargin, null, null);\n\t        } else if (scene.align === 'right') {\n\t            holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);\n\t        } else {\n\t            holderTextGroup.moveTo((scene.width - tpdata.boundingBox.width) / 2, null, null);\n\t        }\n\n\t        holderTextGroup.moveTo(null, (scene.height - tpdata.boundingBox.height) / 2, null);\n\t    }\n\n\t    //todo: renderlist\n\t    return sceneGraph;\n\t}\n\n\t/**\n\t * Adaptive text sizing function\n\t *\n\t * @private\n\t * @param width Parent width\n\t * @param height Parent height\n\t * @param fontSize Requested text size\n\t * @param scale Proportional scale of text\n\t */\n\tfunction textSize(width, height, fontSize, scale) {\n\t    var stageWidth = parseInt(width, 10);\n\t    var stageHeight = parseInt(height, 10);\n\n\t    var bigSide = Math.max(stageWidth, stageHeight);\n\t    var smallSide = Math.min(stageWidth, stageHeight);\n\n\t    var newHeight = 0.8 * Math.min(smallSide, bigSide * scale);\n\t    return Math.round(Math.max(fontSize, newHeight));\n\t}\n\n\t/**\n\t * Iterates over resizable (fluid or auto) placeholders and renders them\n\t *\n\t * @private\n\t * @param element Optional element selector, specified only if a specific element needs to be re-rendered\n\t */\n\tfunction updateResizableElements(element) {\n\t    var images;\n\t    if (element == null || element.nodeType == null) {\n\t        images = App.vars.resizableImages;\n\t    } else {\n\t        images = [element];\n\t    }\n\t    for (var i = 0, l = images.length; i < l; i++) {\n\t        var el = images[i];\n\t        if (el.holderData) {\n\t            var flags = el.holderData.flags;\n\t            var dimensions = dimensionCheck(el);\n\t            if (dimensions) {\n\t                if (!el.holderData.resizeUpdate) {\n\t                    continue;\n\t                }\n\n\t                if (flags.fluid && flags.auto) {\n\t                    var fluidConfig = el.holderData.fluidConfig;\n\t                    switch (fluidConfig.mode) {\n\t                        case 'width':\n\t                            dimensions.height = dimensions.width / fluidConfig.ratio;\n\t                            break;\n\t                        case 'height':\n\t                            dimensions.width = dimensions.height * fluidConfig.ratio;\n\t                            break;\n\t                    }\n\t                }\n\n\t                var settings = {\n\t                    mode: 'image',\n\t                    holderSettings: {\n\t                        dimensions: dimensions,\n\t                        theme: flags.theme,\n\t                        flags: flags\n\t                    },\n\t                    el: el,\n\t                    engineSettings: el.holderData.engineSettings\n\t                };\n\n\t                if (flags.textmode == 'exact') {\n\t                    flags.exactDimensions = dimensions;\n\t                    settings.holderSettings.dimensions = flags.dimensions;\n\t                }\n\n\t                render(settings);\n\t            } else {\n\t                setInvisible(el);\n\t            }\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Sets up aspect ratio metadata for fluid placeholders, in order to preserve proportions when resizing\n\t *\n\t * @private\n\t * @param el Image DOM element\n\t */\n\tfunction setInitialDimensions(el) {\n\t    if (el.holderData) {\n\t        var dimensions = dimensionCheck(el);\n\t        if (dimensions) {\n\t            var flags = el.holderData.flags;\n\n\t            var fluidConfig = {\n\t                fluidHeight: flags.dimensions.height.slice(-1) == '%',\n\t                fluidWidth: flags.dimensions.width.slice(-1) == '%',\n\t                mode: null,\n\t                initialDimensions: dimensions\n\t            };\n\n\t            if (fluidConfig.fluidWidth && !fluidConfig.fluidHeight) {\n\t                fluidConfig.mode = 'width';\n\t                fluidConfig.ratio = fluidConfig.initialDimensions.width / parseFloat(flags.dimensions.height);\n\t            } else if (!fluidConfig.fluidWidth && fluidConfig.fluidHeight) {\n\t                fluidConfig.mode = 'height';\n\t                fluidConfig.ratio = parseFloat(flags.dimensions.width) / fluidConfig.initialDimensions.height;\n\t            }\n\n\t            el.holderData.fluidConfig = fluidConfig;\n\t        } else {\n\t            setInvisible(el);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Iterates through all current invisible images, and if they're visible, renders them and removes them from further checks. Runs every animation frame.\n\t *\n\t * @private\n\t */\n\tfunction visibilityCheck() {\n\t    var renderableImages = [];\n\t    var keys = Object.keys(App.vars.invisibleImages);\n\t    var el;\n\n\t    keys.forEach(function (key) {\n\t        el = App.vars.invisibleImages[key];\n\t        if (dimensionCheck(el) && el.nodeName.toLowerCase() == 'img') {\n\t            renderableImages.push(el);\n\t            delete App.vars.invisibleImages[key];\n\t        }\n\t    });\n\n\t    if (renderableImages.length) {\n\t        Holder.run({\n\t            images: renderableImages\n\t        });\n\t    }\n\n\t    // Done to prevent 100% CPU usage via aggressive calling of requestAnimationFrame\n\t    setTimeout(function () {\n\t        global.requestAnimationFrame(visibilityCheck);\n\t    }, 10);\n\t}\n\n\t/**\n\t * Starts checking for invisible placeholders if not doing so yet. Does nothing otherwise.\n\t *\n\t * @private\n\t */\n\tfunction startVisibilityCheck() {\n\t    if (!App.vars.visibilityCheckStarted) {\n\t        global.requestAnimationFrame(visibilityCheck);\n\t        App.vars.visibilityCheckStarted = true;\n\t    }\n\t}\n\n\t/**\n\t * Sets a unique ID for an image detected to be invisible and adds it to the map of invisible images checked by visibilityCheck\n\t *\n\t * @private\n\t * @param el Invisible DOM element\n\t */\n\tfunction setInvisible(el) {\n\t    if (!el.holderData.invisibleId) {\n\t        App.vars.invisibleId += 1;\n\t        App.vars.invisibleImages['i' + App.vars.invisibleId] = el;\n\t        el.holderData.invisibleId = App.vars.invisibleId;\n\t    }\n\t}\n\n\t//todo: see if possible to convert stagingRenderer to use HTML only\n\tvar stagingRenderer = (function() {\n\t    var svg = null,\n\t        stagingText = null,\n\t        stagingTextNode = null;\n\t    return function(graph) {\n\t        var rootNode = graph.root;\n\t        if (App.setup.supportsSVG) {\n\t            var firstTimeSetup = false;\n\t            var tnode = function(text) {\n\t                return document.createTextNode(text);\n\t            };\n\t            if (svg == null || svg.parentNode !== document.body) {\n\t                firstTimeSetup = true;\n\t            }\n\n\t            svg = SVG.initSVG(svg, rootNode.properties.width, rootNode.properties.height);\n\t            //Show staging element before staging\n\t            svg.style.display = 'block';\n\n\t            if (firstTimeSetup) {\n\t                stagingText = DOM.newEl('text', SVG_NS);\n\t                stagingTextNode = tnode(null);\n\t                DOM.setAttr(stagingText, {\n\t                    x: 0\n\t                });\n\t                stagingText.appendChild(stagingTextNode);\n\t                svg.appendChild(stagingText);\n\t                document.body.appendChild(svg);\n\t                svg.style.visibility = 'hidden';\n\t                svg.style.position = 'absolute';\n\t                svg.style.top = '-100%';\n\t                svg.style.left = '-100%';\n\t                //todo: workaround for zero-dimension <svg> tag in Opera 12\n\t                //svg.setAttribute('width', 0);\n\t                //svg.setAttribute('height', 0);\n\t            }\n\n\t            var holderTextGroup = rootNode.children.holderTextGroup;\n\t            var htgProps = holderTextGroup.properties;\n\t            DOM.setAttr(stagingText, {\n\t                'y': htgProps.font.size,\n\t                'style': utils.cssProps({\n\t                    'font-weight': htgProps.font.weight,\n\t                    'font-size': htgProps.font.size + htgProps.font.units,\n\t                    'font-family': htgProps.font.family\n\t                })\n\t            });\n\n\t            //Get bounding box for the whole string (total width and height)\n\t            stagingTextNode.nodeValue = htgProps.text;\n\t            var stagingTextBBox = stagingText.getBBox();\n\n\t            //Get line count and split the string into words\n\t            var lineCount = Math.ceil(stagingTextBBox.width / rootNode.properties.width);\n\t            var words = htgProps.text.split(' ');\n\t            var newlines = htgProps.text.match(/\\\\n/g);\n\t            lineCount += newlines == null ? 0 : newlines.length;\n\n\t            //Get bounding box for the string with spaces removed\n\t            stagingTextNode.nodeValue = htgProps.text.replace(/[ ]+/g, '');\n\t            var computedNoSpaceLength = stagingText.getComputedTextLength();\n\n\t            //Compute average space width\n\t            var diffLength = stagingTextBBox.width - computedNoSpaceLength;\n\t            var spaceWidth = Math.round(diffLength / Math.max(1, words.length - 1));\n\n\t            //Get widths for every word with space only if there is more than one line\n\t            var wordWidths = [];\n\t            if (lineCount > 1) {\n\t                stagingTextNode.nodeValue = '';\n\t                for (var i = 0; i < words.length; i++) {\n\t                    if (words[i].length === 0) continue;\n\t                    stagingTextNode.nodeValue = utils.decodeHtmlEntity(words[i]);\n\t                    var bbox = stagingText.getBBox();\n\t                    wordWidths.push({\n\t                        text: words[i],\n\t                        width: bbox.width\n\t                    });\n\t                }\n\t            }\n\n\t            //Hide staging element after staging\n\t            svg.style.display = 'none';\n\n\t            return {\n\t                spaceWidth: spaceWidth,\n\t                lineCount: lineCount,\n\t                boundingBox: stagingTextBBox,\n\t                words: wordWidths\n\t            };\n\t        } else {\n\t            //todo: canvas fallback for measuring text on android 2.3\n\t            return false;\n\t        }\n\t    };\n\t})();\n\n\t//Helpers\n\n\t/**\n\t * Prevents a function from being called too often, waits until a timer elapses to call it again\n\t *\n\t * @param fn Function to call\n\t */\n\tfunction debounce(fn) {\n\t    if (!App.vars.debounceTimer) fn.call(this);\n\t    if (App.vars.debounceTimer) global.clearTimeout(App.vars.debounceTimer);\n\t    App.vars.debounceTimer = global.setTimeout(function() {\n\t        App.vars.debounceTimer = null;\n\t        fn.call(this);\n\t    }, App.setup.debounce);\n\t}\n\n\t/**\n\t * Holder-specific resize/orientation change callback, debounced to prevent excessive execution\n\t */\n\tfunction resizeEvent() {\n\t    debounce(function() {\n\t        updateResizableElements(null);\n\t    });\n\t}\n\n\t//Set up flags\n\n\tfor (var flag in App.flags) {\n\t    if (!App.flags.hasOwnProperty(flag)) continue;\n\t    App.flags[flag].match = function(val) {\n\t        return val.match(this.regex);\n\t    };\n\t}\n\n\t//Properties set once on setup\n\n\tApp.setup = {\n\t    renderer: 'html',\n\t    debounce: 100,\n\t    ratio: 1,\n\t    supportsCanvas: false,\n\t    supportsSVG: false,\n\t    lineWrapRatio: 0.9,\n\t    dataAttr: 'data-src',\n\t    renderers: ['html', 'canvas', 'svg']\n\t};\n\n\t//Properties modified during runtime\n\n\tApp.vars = {\n\t    preempted: false,\n\t    resizableImages: [],\n\t    invisibleImages: {},\n\t    invisibleId: 0,\n\t    visibilityCheckStarted: false,\n\t    debounceTimer: null,\n\t    cache: {}\n\t};\n\n\t//Pre-flight\n\n\t(function() {\n\t    var canvas = DOM.newEl('canvas');\n\n\t    if (canvas.getContext) {\n\t        if (canvas.toDataURL('image/png').indexOf('data:image/png') != -1) {\n\t            App.setup.renderer = 'canvas';\n\t            App.setup.supportsCanvas = true;\n\t        }\n\t    }\n\n\t    if (!!document.createElementNS && !!document.createElementNS(SVG_NS, 'svg').createSVGRect) {\n\t        App.setup.renderer = 'svg';\n\t        App.setup.supportsSVG = true;\n\t    }\n\t})();\n\n\t//Starts checking for invisible placeholders\n\tstartVisibilityCheck();\n\n\tif (onDomReady) {\n\t    onDomReady(function() {\n\t        if (!App.vars.preempted) {\n\t            Holder.run();\n\t        }\n\t        if (global.addEventListener) {\n\t            global.addEventListener('resize', resizeEvent, false);\n\t            global.addEventListener('orientationchange', resizeEvent, false);\n\t        } else {\n\t            global.attachEvent('onresize', resizeEvent);\n\t        }\n\n\t        if (typeof global.Turbolinks == 'object') {\n\t            global.document.addEventListener('page:change', function() {\n\t                Holder.run();\n\t            });\n\t        }\n\t    });\n\t}\n\n\tmodule.exports = Holder;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * onDomReady.js 1.4.0 (c) 2013 Tubal Martin - MIT license\n\t *\n\t * Specially modified to work with Holder.js\n\t */\n\n\tfunction _onDomReady(win) {\n\t    //Lazy loading fix for Firefox < 3.6\n\t    //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n\t    if (document.readyState == null && document.addEventListener) {\n\t        document.addEventListener(\"DOMContentLoaded\", function DOMContentLoaded() {\n\t            document.removeEventListener(\"DOMContentLoaded\", DOMContentLoaded, false);\n\t            document.readyState = \"complete\";\n\t        }, false);\n\t        document.readyState = \"loading\";\n\t    }\n\t    \n\t    var doc = win.document,\n\t        docElem = doc.documentElement,\n\t    \n\t        LOAD = \"load\",\n\t        FALSE = false,\n\t        ONLOAD = \"on\"+LOAD,\n\t        COMPLETE = \"complete\",\n\t        READYSTATE = \"readyState\",\n\t        ATTACHEVENT = \"attachEvent\",\n\t        DETACHEVENT = \"detachEvent\",\n\t        ADDEVENTLISTENER = \"addEventListener\",\n\t        DOMCONTENTLOADED = \"DOMContentLoaded\",\n\t        ONREADYSTATECHANGE = \"onreadystatechange\",\n\t        REMOVEEVENTLISTENER = \"removeEventListener\",\n\t    \n\t        // W3C Event model\n\t        w3c = ADDEVENTLISTENER in doc,\n\t        _top = FALSE,\n\t    \n\t        // isReady: Is the DOM ready to be used? Set to true once it occurs.\n\t        isReady = FALSE,\n\t    \n\t        // Callbacks pending execution until DOM is ready\n\t        callbacks = [];\n\t    \n\t    // Handle when the DOM is ready\n\t    function ready( fn ) {\n\t        if ( !isReady ) {\n\t    \n\t            // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t            if ( !doc.body ) {\n\t                return defer( ready );\n\t            }\n\t    \n\t            // Remember that the DOM is ready\n\t            isReady = true;\n\t    \n\t            // Execute all callbacks\n\t            while ( fn = callbacks.shift() ) {\n\t                defer( fn );\n\t            }\n\t        }\n\t    }\n\t    \n\t    // The ready event handler\n\t    function completed( event ) {\n\t        // readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t        if ( w3c || event.type === LOAD || doc[READYSTATE] === COMPLETE ) {\n\t            detach();\n\t            ready();\n\t        }\n\t    }\n\t    \n\t    // Clean-up method for dom ready events\n\t    function detach() {\n\t        if ( w3c ) {\n\t            doc[REMOVEEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\t            win[REMOVEEVENTLISTENER]( LOAD, completed, FALSE );\n\t        } else {\n\t            doc[DETACHEVENT]( ONREADYSTATECHANGE, completed );\n\t            win[DETACHEVENT]( ONLOAD, completed );\n\t        }\n\t    }\n\t    \n\t    // Defers a function, scheduling it to run after the current call stack has cleared.\n\t    function defer( fn, wait ) {\n\t        // Allow 0 to be passed\n\t        setTimeout( fn, +wait >= 0 ? wait : 1 );\n\t    }\n\t    \n\t    // Attach the listeners:\n\t    \n\t    // Catch cases where onDomReady is called after the browser event has already occurred.\n\t    // we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t    // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t    if ( doc[READYSTATE] === COMPLETE ) {\n\t        // Handle it asynchronously to allow scripts the opportunity to delay ready\n\t        defer( ready );\n\t    \n\t    // Standards-based browsers support DOMContentLoaded\n\t    } else if ( w3c ) {\n\t        // Use the handy event callback\n\t        doc[ADDEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\t    \n\t        // A fallback to window.onload, that will always work\n\t        win[ADDEVENTLISTENER]( LOAD, completed, FALSE );\n\t    \n\t    // If IE event model is used\n\t    } else {\n\t        // Ensure firing before onload, maybe late but safe also for iframes\n\t        doc[ATTACHEVENT]( ONREADYSTATECHANGE, completed );\n\t    \n\t        // A fallback to window.onload, that will always work\n\t        win[ATTACHEVENT]( ONLOAD, completed );\n\t    \n\t        // If IE and not a frame\n\t        // continually check to see if the document is ready\n\t        try {\n\t            _top = win.frameElement == null && docElem;\n\t        } catch(e) {}\n\t    \n\t        if ( _top && _top.doScroll ) {\n\t            (function doScrollCheck() {\n\t                if ( !isReady ) {\n\t                    try {\n\t                        // Use the trick by Diego Perini\n\t                        // http://javascript.nwbox.com/IEContentLoaded/\n\t                        _top.doScroll(\"left\");\n\t                    } catch(e) {\n\t                        return defer( doScrollCheck, 50 );\n\t                    }\n\t    \n\t                    // detach all dom ready events\n\t                    detach();\n\t    \n\t                    // and execute any waiting functions\n\t                    ready();\n\t                }\n\t            })();\n\t        }\n\t    }\n\t    \n\t    function onDomReady( fn ) {\n\t        // If DOM is ready, execute the function (async), otherwise wait\n\t        isReady ? defer( fn ) : callbacks.push( fn );\n\t    }\n\t    \n\t    // Add version\n\t    onDomReady.version = \"1.4.0\";\n\t    // Add method to check if DOM is ready\n\t    onDomReady.isReady = function(){\n\t        return isReady;\n\t    };\n\n\t    return onDomReady;\n\t}\n\n\tmodule.exports = typeof window !== \"undefined\" && _onDomReady(window);\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//Modified version of component/querystring\n\t//Changes: updated dependencies, dot notation parsing, JSHint fixes\n\t//Fork at https://github.com/imsky/querystring\n\n\t/**\n\t * Module dependencies.\n\t */\n\n\tvar encode = encodeURIComponent;\n\tvar decode = decodeURIComponent;\n\tvar trim = __webpack_require__(4);\n\tvar type = __webpack_require__(5);\n\n\tvar arrayRegex = /(\\w+)\\[(\\d+)\\]/;\n\tvar objectRegex = /\\w+\\.\\w+/;\n\n\t/**\n\t * Parse the given query `str`.\n\t *\n\t * @param {String} str\n\t * @return {Object}\n\t * @api public\n\t */\n\n\texports.parse = function(str){\n\t  if ('string' !== typeof str) return {};\n\n\t  str = trim(str);\n\t  if ('' === str) return {};\n\t  if ('?' === str.charAt(0)) str = str.slice(1);\n\n\t  var obj = {};\n\t  var pairs = str.split('&');\n\t  for (var i = 0; i < pairs.length; i++) {\n\t    var parts = pairs[i].split('=');\n\t    var key = decode(parts[0]);\n\t    var m, ctx, prop;\n\n\t    if (m = arrayRegex.exec(key)) {\n\t      obj[m[1]] = obj[m[1]] || [];\n\t      obj[m[1]][m[2]] = decode(parts[1]);\n\t      continue;\n\t    }\n\n\t    if (m = objectRegex.test(key)) {\n\t      m = key.split('.');\n\t      ctx = obj;\n\t      \n\t      while (m.length) {\n\t        prop = m.shift();\n\n\t        if (!prop.length) continue;\n\n\t        if (!ctx[prop]) {\n\t          ctx[prop] = {};\n\t        } else if (ctx[prop] && typeof ctx[prop] !== 'object') {\n\t          break;\n\t        }\n\n\t        if (!m.length) {\n\t          ctx[prop] = decode(parts[1]);\n\t        }\n\n\t        ctx = ctx[prop];\n\t      }\n\n\t      continue;\n\t    }\n\n\t    obj[parts[0]] = null == parts[1] ? '' : decode(parts[1]);\n\t  }\n\n\t  return obj;\n\t};\n\n\t/**\n\t * Stringify the given `obj`.\n\t *\n\t * @param {Object} obj\n\t * @return {String}\n\t * @api public\n\t */\n\n\texports.stringify = function(obj){\n\t  if (!obj) return '';\n\t  var pairs = [];\n\n\t  for (var key in obj) {\n\t    var value = obj[key];\n\n\t    if ('array' == type(value)) {\n\t      for (var i = 0; i < value.length; ++i) {\n\t        pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));\n\t      }\n\t      continue;\n\t    }\n\n\t    pairs.push(encode(key) + '=' + encode(obj[key]));\n\t  }\n\n\t  return pairs.join('&');\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\n\texports = module.exports = trim;\n\n\tfunction trim(str){\n\t  return str.replace(/^\\s*|\\s*$/g, '');\n\t}\n\n\texports.left = function(str){\n\t  return str.replace(/^\\s*/, '');\n\t};\n\n\texports.right = function(str){\n\t  return str.replace(/\\s*$/, '');\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t/**\n\t * toString ref.\n\t */\n\n\tvar toString = Object.prototype.toString;\n\n\t/**\n\t * Return the type of `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {String}\n\t * @api public\n\t */\n\n\tmodule.exports = function(val){\n\t  switch (toString.call(val)) {\n\t    case '[object Date]': return 'date';\n\t    case '[object RegExp]': return 'regexp';\n\t    case '[object Arguments]': return 'arguments';\n\t    case '[object Array]': return 'array';\n\t    case '[object Error]': return 'error';\n\t  }\n\n\t  if (val === null) return 'null';\n\t  if (val === undefined) return 'undefined';\n\t  if (val !== val) return 'nan';\n\t  if (val && val.nodeType === 1) return 'element';\n\n\t  val = val.valueOf\n\t    ? val.valueOf()\n\t    : Object.prototype.valueOf.apply(val)\n\n\t  return typeof val;\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\tvar SceneGraph = function(sceneProperties) {\n\t    var nodeCount = 1;\n\n\t    //todo: move merge to helpers section\n\t    function merge(parent, child) {\n\t        for (var prop in child) {\n\t            parent[prop] = child[prop];\n\t        }\n\t        return parent;\n\t    }\n\n\t    var SceneNode = function(name) {\n\t        nodeCount++;\n\t        this.parent = null;\n\t        this.children = {};\n\t        this.id = nodeCount;\n\t        this.name = 'n' + nodeCount;\n\t        if (typeof name !== 'undefined') {\n\t            this.name = name;\n\t        }\n\t        this.x = this.y = this.z = 0;\n\t        this.width = this.height = 0;\n\t    };\n\n\t    SceneNode.prototype.resize = function(width, height) {\n\t        if (width != null) {\n\t            this.width = width;\n\t        }\n\t        if (height != null) {\n\t            this.height = height;\n\t        }\n\t    };\n\n\t    SceneNode.prototype.moveTo = function(x, y, z) {\n\t        this.x = x != null ? x : this.x;\n\t        this.y = y != null ? y : this.y;\n\t        this.z = z != null ? z : this.z;\n\t    };\n\n\t    SceneNode.prototype.add = function(child) {\n\t        var name = child.name;\n\t        if (typeof this.children[name] === 'undefined') {\n\t            this.children[name] = child;\n\t            child.parent = this;\n\t        } else {\n\t            throw 'SceneGraph: child already exists: ' + name;\n\t        }\n\t    };\n\n\t    var RootNode = function() {\n\t        SceneNode.call(this, 'root');\n\t        this.properties = sceneProperties;\n\t    };\n\n\t    RootNode.prototype = new SceneNode();\n\n\t    var Shape = function(name, props) {\n\t        SceneNode.call(this, name);\n\t        this.properties = {\n\t            'fill': '#000000'\n\t        };\n\t        if (typeof props !== 'undefined') {\n\t            merge(this.properties, props);\n\t        } else if (typeof name !== 'undefined' && typeof name !== 'string') {\n\t            throw 'SceneGraph: invalid node name';\n\t        }\n\t    };\n\n\t    Shape.prototype = new SceneNode();\n\n\t    var Group = function() {\n\t        Shape.apply(this, arguments);\n\t        this.type = 'group';\n\t    };\n\n\t    Group.prototype = new Shape();\n\n\t    var Rect = function() {\n\t        Shape.apply(this, arguments);\n\t        this.type = 'rect';\n\t    };\n\n\t    Rect.prototype = new Shape();\n\n\t    var Text = function(text) {\n\t        Shape.call(this);\n\t        this.type = 'text';\n\t        this.properties.text = text;\n\t    };\n\n\t    Text.prototype = new Shape();\n\n\t    var root = new RootNode();\n\n\t    this.Shape = {\n\t        'Rect': Rect,\n\t        'Text': Text,\n\t        'Group': Group\n\t    };\n\n\t    this.root = root;\n\t    return this;\n\t};\n\n\tmodule.exports = SceneGraph;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Shallow object clone and merge\n\t *\n\t * @param a Object A\n\t * @param b Object B\n\t * @returns {Object} New object with all of A's properties, and all of B's properties, overwriting A's properties\n\t */\n\texports.extend = function(a, b) {\n\t    var c = {};\n\t    for (var x in a) {\n\t        if (a.hasOwnProperty(x)) {\n\t            c[x] = a[x];\n\t        }\n\t    }\n\t    if (b != null) {\n\t        for (var y in b) {\n\t            if (b.hasOwnProperty(y)) {\n\t                c[y] = b[y];\n\t            }\n\t        }\n\t    }\n\t    return c;\n\t};\n\n\t/**\n\t * Takes a k/v list of CSS properties and returns a rule\n\t *\n\t * @param props CSS properties object\n\t */\n\texports.cssProps = function(props) {\n\t    var ret = [];\n\t    for (var p in props) {\n\t        if (props.hasOwnProperty(p)) {\n\t            ret.push(p + ':' + props[p]);\n\t        }\n\t    }\n\t    return ret.join(';');\n\t};\n\n\t/**\n\t * Encodes HTML entities in a string\n\t *\n\t * @param str Input string\n\t */\n\texports.encodeHtmlEntity = function(str) {\n\t    var buf = [];\n\t    var charCode = 0;\n\t    for (var i = str.length - 1; i >= 0; i--) {\n\t        charCode = str.charCodeAt(i);\n\t        if (charCode > 128) {\n\t            buf.unshift(['&#', charCode, ';'].join(''));\n\t        } else {\n\t            buf.unshift(str[i]);\n\t        }\n\t    }\n\t    return buf.join('');\n\t};\n\n\t/**\n\t * Checks if an image exists\n\t *\n\t * @param src URL of image\n\t * @param callback Callback to call once image status has been found\n\t */\n\texports.imageExists = function(src, callback) {\n\t    var image = new Image();\n\t    image.onerror = function() {\n\t        callback.call(this, false);\n\t    };\n\t    image.onload = function() {\n\t        callback.call(this, true);\n\t    };\n\t    image.src = src;\n\t};\n\n\t/**\n\t * Decodes HTML entities in a string\n\t *\n\t * @param str Input string\n\t */\n\texports.decodeHtmlEntity = function(str) {\n\t    return str.replace(/&#(\\d+);/g, function(match, dec) {\n\t        return String.fromCharCode(dec);\n\t    });\n\t};\n\n\n\t/**\n\t * Returns an element's dimensions if it's visible, `false` otherwise.\n\t *\n\t * @param el DOM element\n\t */\n\texports.dimensionCheck = function(el) {\n\t    var dimensions = {\n\t        height: el.clientHeight,\n\t        width: el.clientWidth\n\t    };\n\n\t    if (dimensions.height && dimensions.width) {\n\t        return dimensions;\n\t    } else {\n\t        return false;\n\t    }\n\t};\n\n\n\t/**\n\t * Returns true if value is truthy or if it is \"semantically truthy\"\n\t * @param val\n\t */\n\texports.truthy = function(val) {\n\t    if (typeof val === 'string') {\n\t        return val === 'true' || val === 'yes' || val === '1' || val === 'on' || val === '✓';\n\t    }\n\t    return !!val;\n\t};\n\n\t/**\n\t * Parses input into a well-formed CSS color\n\t * @param val\n\t */\n\texports.parseColor = function(val) {\n\t    var hexre = /(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i;\n\t    var rgbre = /^rgb\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;\n\t    var rgbare = /^rgba\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(0\\.\\d{1,}|1)\\)$/;\n\n\t    var match = val.match(hexre);\n\t    var retval;\n\n\t    if (match !== null) {\n\t        retval = match[1] || match[2];\n\t        if (retval[0] !== '#') {\n\t            return '#' + retval;\n\t        } else {\n\t            return retval;\n\t        }\n\t    }\n\n\t    match = val.match(rgbre);\n\n\t    if (match !== null) {\n\t        retval = 'rgb(' + match.slice(1).join(',') + ')';\n\t        return retval;\n\t    }\n\n\t    match = val.match(rgbare);\n\n\t    if (match !== null) {\n\t        retval = 'rgba(' + match.slice(1).join(',') + ')';\n\t        return retval;\n\t    }\n\n\t    return null;\n\t};\n\n\t/**\n\t * Provides the correct scaling ratio for canvas drawing operations on HiDPI screens (e.g. Retina displays)\n\t */\n\texports.canvasRatio = function () {\n\t    var devicePixelRatio = 1;\n\t    var backingStoreRatio = 1;\n\n\t    if (global.document) {\n\t        var canvas = global.document.createElement('canvas');\n\t        if (canvas.getContext) {\n\t            var ctx = canvas.getContext('2d');\n\t            devicePixelRatio = global.devicePixelRatio || 1;\n\t            backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\n\t        }\n\t    }\n\n\t    return devicePixelRatio / backingStoreRatio;\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var DOM = __webpack_require__(9);\n\n\tvar SVG_NS = 'http://www.w3.org/2000/svg';\n\tvar NODE_TYPE_COMMENT = 8;\n\n\t/**\n\t * Generic SVG element creation function\n\t *\n\t * @param svg SVG context, set to null if new\n\t * @param width Document width\n\t * @param height Document height\n\t */\n\texports.initSVG = function(svg, width, height) {\n\t    var defs, style, initialize = false;\n\n\t    if (svg && svg.querySelector) {\n\t        style = svg.querySelector('style');\n\t        if (style === null) {\n\t            initialize = true;\n\t        }\n\t    } else {\n\t        svg = DOM.newEl('svg', SVG_NS);\n\t        initialize = true;\n\t    }\n\n\t    if (initialize) {\n\t        defs = DOM.newEl('defs', SVG_NS);\n\t        style = DOM.newEl('style', SVG_NS);\n\t        DOM.setAttr(style, {\n\t            'type': 'text/css'\n\t        });\n\t        defs.appendChild(style);\n\t        svg.appendChild(defs);\n\t    }\n\n\t    //IE throws an exception if this is set and Chrome requires it to be set\n\t    if (svg.webkitMatchesSelector) {\n\t        svg.setAttribute('xmlns', SVG_NS);\n\t    }\n\n\t    //Remove comment nodes\n\t    for (var i = 0; i < svg.childNodes.length; i++) {\n\t        if (svg.childNodes[i].nodeType === NODE_TYPE_COMMENT) {\n\t            svg.removeChild(svg.childNodes[i]);\n\t        }\n\t    }\n\n\t    //Remove CSS\n\t    while (style.childNodes.length) {\n\t        style.removeChild(style.childNodes[0]);\n\t    }\n\n\t    DOM.setAttr(svg, {\n\t        'width': width,\n\t        'height': height,\n\t        'viewBox': '0 0 ' + width + ' ' + height,\n\t        'preserveAspectRatio': 'none'\n\t    });\n\n\t    return svg;\n\t};\n\n\t/**\n\t * Converts serialized SVG to a string suitable for data URI use\n\t * @param svgString Serialized SVG string\n\t * @param [base64] Use base64 encoding for data URI\n\t */\n\texports.svgStringToDataURI = function() {\n\t    var rawPrefix = 'data:image/svg+xml;charset=UTF-8,';\n\t    var base64Prefix = 'data:image/svg+xml;charset=UTF-8;base64,';\n\n\t    return function(svgString, base64) {\n\t        if (base64) {\n\t            return base64Prefix + btoa(global.unescape(encodeURIComponent(svgString)));\n\t        } else {\n\t            return rawPrefix + encodeURIComponent(svgString);\n\t        }\n\t    };\n\t}();\n\n\t/**\n\t * Returns serialized SVG with XML processing instructions\n\t *\n\t * @param svg SVG context\n\t * @param stylesheets CSS stylesheets to include\n\t */\n\texports.serializeSVG = function(svg, engineSettings) {\n\t    if (!global.XMLSerializer) return;\n\t    var serializer = new XMLSerializer();\n\t    var svgCSS = '';\n\t    var stylesheets = engineSettings.stylesheets;\n\n\t    //External stylesheets: Processing Instruction method\n\t    if (engineSettings.svgXMLStylesheet) {\n\t        var xml = DOM.createXML();\n\t        //Add <?xml-stylesheet ?> directives\n\t        for (var i = stylesheets.length - 1; i >= 0; i--) {\n\t            var csspi = xml.createProcessingInstruction('xml-stylesheet', 'href=\"' + stylesheets[i] + '\" rel=\"stylesheet\"');\n\t            xml.insertBefore(csspi, xml.firstChild);\n\t        }\n\n\t        xml.removeChild(xml.documentElement);\n\t        svgCSS = serializer.serializeToString(xml);\n\t    }\n\n\t    var svgText = serializer.serializeToString(svg);\n\t    svgText = svgText.replace(/\\&amp;(\\#[0-9]{2,}\\;)/g, '&$1');\n\t    return svgCSS + svgText;\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Generic new DOM element function\n\t *\n\t * @param tag Tag to create\n\t * @param namespace Optional namespace value\n\t */\n\texports.newEl = function(tag, namespace) {\n\t    if (!global.document) return;\n\n\t    if (namespace == null) {\n\t        return global.document.createElement(tag);\n\t    } else {\n\t        return global.document.createElementNS(namespace, tag);\n\t    }\n\t};\n\n\t/**\n\t * Generic setAttribute function\n\t *\n\t * @param el Reference to DOM element\n\t * @param attrs Object with attribute keys and values\n\t */\n\texports.setAttr = function (el, attrs) {\n\t    for (var a in attrs) {\n\t        el.setAttribute(a, attrs[a]);\n\t    }\n\t};\n\n\t/**\n\t * Creates a XML document\n\t * @private\n\t */\n\texports.createXML = function() {\n\t    if (!global.DOMParser) return;\n\t    return new DOMParser().parseFromString('<xml />', 'application/xml');\n\t};\n\n\t/**\n\t * Converts a value into an array of DOM nodes\n\t *\n\t * @param val A string, a NodeList, a Node, or an HTMLCollection\n\t */\n\texports.getNodeArray = function(val) {\n\t    var retval = null;\n\t    if (typeof(val) == 'string') {\n\t        retval = document.querySelectorAll(val);\n\t    } else if (global.NodeList && val instanceof global.NodeList) {\n\t        retval = val;\n\t    } else if (global.Node && val instanceof global.Node) {\n\t        retval = [val];\n\t    } else if (global.HTMLCollection && val instanceof global.HTMLCollection) {\n\t        retval = val;\n\t    } else if (val instanceof Array) {\n\t        retval = val;\n\t    } else if (val === null) {\n\t        retval = [];\n\t    }\n\n\t    retval = Array.prototype.slice.call(retval);\n\n\t    return retval;\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\tvar Color = function(color, options) {\n\t    //todo: support rgba, hsla, and rrggbbaa notation\n\t    //todo: use CIELAB internally\n\t    //todo: add clamp function (with sign)\n\t    if (typeof color !== 'string') return;\n\n\t    this.original = color;\n\n\t    if (color.charAt(0) === '#') {\n\t        color = color.slice(1);\n\t    }\n\n\t    if (/[^a-f0-9]+/i.test(color)) return;\n\n\t    if (color.length === 3) {\n\t        color = color.replace(/./g, '$&$&');\n\t    }\n\n\t    if (color.length !== 6) return;\n\n\t    this.alpha = 1;\n\n\t    if (options && options.alpha) {\n\t        this.alpha = options.alpha;\n\t    }\n\n\t    this.set(parseInt(color, 16));\n\t};\n\n\t//todo: jsdocs\n\tColor.rgb2hex = function(r, g, b) {\n\t    function format (decimal) {\n\t        var hex = (decimal | 0).toString(16);\n\t        if (decimal < 16) {\n\t            hex = '0' + hex;\n\t        }\n\t        return hex;\n\t    }\n\n\t    return [r, g, b].map(format).join('');\n\t};\n\n\t//todo: jsdocs\n\tColor.hsl2rgb = function (h, s, l) {\n\t    var H = h / 60;\n\t    var C = (1 - Math.abs(2 * l - 1)) * s;\n\t    var X = C * (1 - Math.abs(parseInt(H) % 2 - 1));\n\t    var m = l - (C / 2);\n\n\t    var r = 0, g = 0, b = 0;\n\n\t    if (H >= 0 && H < 1) {\n\t        r = C;\n\t        g = X;\n\t    } else if (H >= 1 && H < 2) {\n\t        r = X;\n\t        g = C;\n\t    } else if (H >= 2 && H < 3) {\n\t        g = C;\n\t        b = X;\n\t    } else if (H >= 3 && H < 4) {\n\t        g = X;\n\t        b = C;\n\t    } else if (H >= 4 && H < 5) {\n\t        r = X;\n\t        b = C;\n\t    } else if (H >= 5 && H < 6) {\n\t        r = C;\n\t        b = X;\n\t    }\n\n\t    r += m;\n\t    g += m;\n\t    b += m;\n\n\t    r = parseInt(r * 255);\n\t    g = parseInt(g * 255);\n\t    b = parseInt(b * 255);\n\n\t    return [r, g, b];\n\t};\n\n\t/**\n\t * Sets the color from a raw RGB888 integer\n\t * @param raw RGB888 representation of color\n\t */\n\t//todo: refactor into a static method\n\t//todo: factor out individual color spaces\n\t//todo: add HSL, CIELAB, and CIELUV\n\tColor.prototype.set = function (val) {\n\t    this.raw = val;\n\n\t    var r = (this.raw & 0xFF0000) >> 16;\n\t    var g = (this.raw & 0x00FF00) >> 8;\n\t    var b = (this.raw & 0x0000FF);\n\n\t    // BT.709\n\t    var y = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n\t    var u = -0.09991 * r - 0.33609 * g + 0.436 * b;\n\t    var v = 0.615 * r - 0.55861 * g - 0.05639 * b;\n\n\t    this.rgb = {\n\t        r: r,\n\t        g: g,\n\t        b: b\n\t    };\n\n\t    this.yuv = {\n\t        y: y,\n\t        u: u,\n\t        v: v\n\t    };\n\n\t    return this;\n\t};\n\n\t/**\n\t * Lighten or darken a color\n\t * @param multiplier Amount to lighten or darken (-1 to 1)\n\t */\n\tColor.prototype.lighten = function(multiplier) {\n\t    var cm = Math.min(1, Math.max(0, Math.abs(multiplier))) * (multiplier < 0 ? -1 : 1);\n\t    var bm = (255 * cm) | 0;\n\t    var cr = Math.min(255, Math.max(0, this.rgb.r + bm));\n\t    var cg = Math.min(255, Math.max(0, this.rgb.g + bm));\n\t    var cb = Math.min(255, Math.max(0, this.rgb.b + bm));\n\t    var hex = Color.rgb2hex(cr, cg, cb);\n\t    return new Color(hex);\n\t};\n\n\t/**\n\t * Output color in hex format\n\t * @param addHash Add a hash character to the beginning of the output\n\t */\n\tColor.prototype.toHex = function(addHash) {\n\t    return (addHash ? '#' : '') + this.raw.toString(16);\n\t};\n\n\t/**\n\t * Returns whether or not current color is lighter than another color\n\t * @param color Color to compare against\n\t */\n\tColor.prototype.lighterThan = function(color) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    return this.yuv.y > color.yuv.y;\n\t};\n\n\t/**\n\t * Returns the result of mixing current color with another color\n\t * @param color Color to mix with\n\t * @param multiplier How much to mix with the other color\n\t */\n\t/*\n\tColor.prototype.mix = function (color, multiplier) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    var r = this.rgb.r;\n\t    var g = this.rgb.g;\n\t    var b = this.rgb.b;\n\t    var a = this.alpha;\n\n\t    var m = typeof multiplier !== 'undefined' ? multiplier : 0.5;\n\n\t    //todo: write a lerp function\n\t    r = r + m * (color.rgb.r - r);\n\t    g = g + m * (color.rgb.g - g);\n\t    b = b + m * (color.rgb.b - b);\n\t    a = a + m * (color.alpha - a);\n\n\t    return new Color(Color.rgbToHex(r, g, b), {\n\t        'alpha': a\n\t    });\n\t};\n\t*/\n\n\t/**\n\t * Returns the result of blending another color on top of current color with alpha\n\t * @param color Color to blend on top of current color, i.e. \"Ca\"\n\t */\n\t//todo: see if .blendAlpha can be merged into .mix\n\tColor.prototype.blendAlpha = function(color) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    var Ca = color;\n\t    var Cb = this;\n\n\t    //todo: write alpha blending function\n\t    var r = Ca.alpha * Ca.rgb.r + (1 - Ca.alpha) * Cb.rgb.r;\n\t    var g = Ca.alpha * Ca.rgb.g + (1 - Ca.alpha) * Cb.rgb.g;\n\t    var b = Ca.alpha * Ca.rgb.b + (1 - Ca.alpha) * Cb.rgb.b;\n\n\t    return new Color(Color.rgb2hex(r, g, b));\n\t};\n\n\tmodule.exports = Color;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {\n\t  'version': '2.9.0',\n\t  'svg_ns': 'http://www.w3.org/2000/svg'\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shaven = __webpack_require__(13);\n\n\tvar SVG = __webpack_require__(8);\n\tvar constants = __webpack_require__(11);\n\tvar utils = __webpack_require__(7);\n\n\tvar SVG_NS = constants.svg_ns;\n\n\tvar templates = {\n\t  'element': function (options) {\n\t    var tag = options.tag;\n\t    var content = options.content || '';\n\t    delete options.tag;\n\t    delete options.content;\n\t    return  [tag, content, options];\n\t  }\n\t};\n\n\t//todo: deprecate tag arg, infer tag from shape object\n\tfunction convertShape (shape, tag) {\n\t  return templates.element({\n\t    'tag': tag,\n\t    'width': shape.width,\n\t    'height': shape.height,\n\t    'fill': shape.properties.fill\n\t  });\n\t}\n\n\tfunction textCss (properties) {\n\t  return utils.cssProps({\n\t    'fill': properties.fill,\n\t    'font-weight': properties.font.weight,\n\t    'font-family': properties.font.family + ', monospace',\n\t    'font-size': properties.font.size + properties.font.units\n\t  });\n\t}\n\n\tfunction outlinePath (bgWidth, bgHeight, outlineWidth) {\n\t  var outlineOffsetWidth = outlineWidth / 2;\n\n\t  return [\n\t    'M', outlineOffsetWidth, outlineOffsetWidth,\n\t    'H', bgWidth - outlineOffsetWidth,\n\t    'V', bgHeight - outlineOffsetWidth,\n\t    'H', outlineOffsetWidth,\n\t    'V', 0,\n\t    'M', 0, outlineOffsetWidth,\n\t    'L', bgWidth, bgHeight - outlineOffsetWidth,\n\t    'M', 0, bgHeight - outlineOffsetWidth,\n\t    'L', bgWidth, outlineOffsetWidth\n\t  ].join(' ');\n\t}\n\n\tmodule.exports = function (sceneGraph, renderSettings) {\n\t  var engineSettings = renderSettings.engineSettings;\n\t  var stylesheets = engineSettings.stylesheets;\n\t  var stylesheetXml = stylesheets.map(function (stylesheet) {\n\t    return '<?xml-stylesheet rel=\"stylesheet\" href=\"' + stylesheet + '\"?>';\n\t  }).join('\\n');\n\n\t  var holderId = 'holder_' + Number(new Date()).toString(16);\n\n\t  var root = sceneGraph.root;\n\t  var textGroup = root.children.holderTextGroup;\n\n\t  var css = '#' + holderId + ' text { ' + textCss(textGroup.properties) + ' } ';\n\n\t  // push text down to be equally vertically aligned with canvas renderer\n\t  textGroup.y += textGroup.textPositionData.boundingBox.height * 0.8;\n\n\t  var wordTags = [];\n\n\t  Object.keys(textGroup.children).forEach(function (lineKey) {\n\t    var line = textGroup.children[lineKey];\n\n\t    Object.keys(line.children).forEach(function (wordKey) {\n\t      var word = line.children[wordKey];\n\t      var x = textGroup.x + line.x + word.x;\n\t      var y = textGroup.y + line.y + word.y;\n\n\t      var wordTag = templates.element({\n\t        'tag': 'text',\n\t        'content': word.properties.text,\n\t        'x': x,\n\t        'y': y\n\t      });\n\n\t      wordTags.push(wordTag);\n\t    });\n\t  });\n\n\t  var text = templates.element({\n\t    'tag': 'g',\n\t    'content': wordTags\n\t  });\n\n\t  var outline = null;\n\n\t  if (root.children.holderBg.properties.outline) {\n\t    var outlineProperties = root.children.holderBg.properties.outline;\n\t    outline = templates.element({\n\t      'tag': 'path',\n\t      'd': outlinePath(root.children.holderBg.width, root.children.holderBg.height, outlineProperties.width),\n\t      'stroke-width': outlineProperties.width,\n\t      'stroke': outlineProperties.fill,\n\t      'fill': 'none'\n\t    });\n\t  }\n\n\t  var bg = convertShape(root.children.holderBg, 'rect');\n\n\t  var sceneContent = [];\n\n\t  sceneContent.push(bg);\n\t  if (outlineProperties) {\n\t    sceneContent.push(outline);\n\t  }\n\t  sceneContent.push(text);\n\n\t  var scene = templates.element({\n\t    'tag': 'g',\n\t    'id': holderId,\n\t    'content': sceneContent\n\t  });\n\n\t  var style = templates.element({\n\t    'tag': 'style',\n\t    //todo: figure out how to add CDATA directive\n\t    'content': css,\n\t    'type': 'text/css'\n\t  });\n\n\t  var defs = templates.element({\n\t    'tag': 'defs',\n\t    'content': style\n\t  });\n\n\t  var svg = templates.element({\n\t    'tag': 'svg',\n\t    'content': [defs, scene],\n\t    'width': root.properties.width,\n\t    'height': root.properties.height,\n\t    'xmlns': SVG_NS,\n\t    'viewBox': [0, 0, root.properties.width, root.properties.height].join(' '),\n\t    'preserveAspectRatio': 'none'\n\t  });\n\n\t  var output = shaven(svg);\n\t  \n\t  output = stylesheetXml + output[0];\n\n\t  var svgString = SVG.svgStringToDataURI(output, renderSettings.mode === 'background');\n\t  return svgString;\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar escape = __webpack_require__(14)\n\n\t// TODO: remove namespace\n\n\tmodule.exports = function shaven (array, namespace, returnObject) {\n\n\t\t'use strict'\n\n\t\tvar i = 1,\n\t\t\tdoesEscape = true,\n\t\t\tHTMLString,\n\t\t\tattributeKey,\n\t\t\tcallback,\n\t\t\tkey\n\n\n\t\treturnObject = returnObject || {}\n\n\n\t\tfunction createElement (sugarString) {\n\n\t\t\tvar tags = sugarString.match(/^\\w+/),\n\t\t\t\telement = {\n\t\t\t\t\ttag: tags ? tags[0] : 'div',\n\t\t\t\t\tattr: {},\n\t\t\t\t\tchildren: []\n\t\t\t\t},\n\t\t\t\tid = sugarString.match(/#([\\w-]+)/),\n\t\t\t\treference = sugarString.match(/\\$([\\w-]+)/),\n\t\t\t\tclassNames = sugarString.match(/\\.[\\w-]+/g)\n\n\n\t\t\t// Assign id if is set\n\t\t\tif (id) {\n\t\t\t\telement.attr.id = id[1]\n\n\t\t\t\t// Add element to the return object\n\t\t\t\treturnObject[id[1]] = element\n\t\t\t}\n\n\t\t\tif (reference)\n\t\t\t\treturnObject[reference[1]] = element\n\n\t\t\tif (classNames)\n\t\t\t\telement.attr.class = classNames.join(' ').replace(/\\./g, '')\n\n\t\t\tif (sugarString.match(/&$/g))\n\t\t\t\tdoesEscape = false\n\n\t\t\treturn element\n\t\t}\n\n\t\tfunction replacer (key, value) {\n\n\t\t\tif (value === null || value === false || value === undefined)\n\t\t\t\treturn\n\n\t\t\tif (typeof value !== 'string' && typeof value !== 'object')\n\t\t\t\treturn String(value)\n\n\t\t\treturn value\n\t\t}\n\n\t\tfunction escapeAttribute (string) {\n\t\t\treturn String(string)\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/\"/g, '&quot;')\n\t\t}\n\n\t\tfunction escapeHTML (string) {\n\t\t\treturn String(string)\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/\"/g, '&quot;')\n\t\t\t\t.replace(/'/g, '&apos;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t}\n\n\n\t\tif (typeof array[0] === 'string')\n\t\t\tarray[0] = createElement(array[0])\n\n\t\telse if (Array.isArray(array[0]))\n\t\t\ti = 0\n\n\t\telse\n\t\t\tthrow new Error(\n\t\t\t\t'First element of array must be a string, ' +\n\t\t\t\t'or an array and not ' + JSON.stringify(array[0])\n\t\t\t)\n\n\n\t\tfor (; i < array.length; i++) {\n\n\t\t\t// Don't render element if value is false or null\n\t\t\tif (array[i] === false || array[i] === null) {\n\t\t\t\tarray[0] = false\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Continue with next array value if current value is undefined or true\n\t\t\telse if (array[i] === undefined || array[i] === true) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'string') {\n\t\t\t\tif (doesEscape)\n\t\t\t\t\tarray[i] = escapeHTML(array[i])\n\n\t\t\t\tarray[0].children.push(array[i])\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'number') {\n\n\t\t\t\tarray[0].children.push(array[i])\n\t\t\t}\n\n\t\t\telse if (Array.isArray(array[i])) {\n\n\t\t\t\tif (Array.isArray(array[i][0])) {\n\t\t\t\t\tarray[i].reverse().forEach(function (subArray) {\n\t\t\t\t\t\tarray.splice(i + 1, 0, subArray)\n\t\t\t\t\t})\n\n\t\t\t\t\tif (i !== 0)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\ti++\n\t\t\t\t}\n\n\t\t\t\tshaven(array[i], namespace, returnObject)\n\n\t\t\t\tif (array[i][0])\n\t\t\t\t\tarray[0].children.push(array[i][0])\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'function')\n\t\t\t\tcallback = array[i]\n\n\n\t\t\telse if (typeof array[i] === 'object') {\n\t\t\t\tfor (attributeKey in array[i])\n\t\t\t\t\tif (array[i].hasOwnProperty(attributeKey))\n\t\t\t\t\t\tif (array[i][attributeKey] !== null &&\n\t\t\t\t\t\t\tarray[i][attributeKey] !== false)\n\t\t\t\t\t\t\tif (attributeKey === 'style' &&\n\t\t\t\t\t\t\t\ttypeof array[i][attributeKey] === 'object')\n\t\t\t\t\t\t\t\tarray[0].attr[attributeKey] = JSON\n\t\t\t\t\t\t\t\t\t.stringify(array[i][attributeKey], replacer)\n\t\t\t\t\t\t\t\t\t.slice(2, -2)\n\t\t\t\t\t\t\t\t\t.replace(/\",\"/g, ';')\n\t\t\t\t\t\t\t\t\t.replace(/\":\"/g, ':')\n\t\t\t\t\t\t\t\t\t.replace(/\\\\\"/g, '\\'')\n\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tarray[0].attr[attributeKey] = array[i][attributeKey]\n\t\t\t}\n\n\t\t\telse\n\t\t\t\tthrow new TypeError('\"' + array[i] + '\" is not allowed as a value.')\n\t\t}\n\n\n\t\tif (array[0] !== false) {\n\n\t\t\tHTMLString = '<' + array[0].tag\n\n\t\t\tfor (key in array[0].attr)\n\t\t\t\tif (array[0].attr.hasOwnProperty(key))\n\t\t\t\t\tHTMLString += ' ' + key + '=\"' +\n\t\t\t\t\t\tescapeAttribute(array[0].attr[key] || '') + '\"'\n\n\t\t\tHTMLString += '>'\n\n\t\t\tarray[0].children.forEach(function (child) {\n\t\t\t\tHTMLString += child\n\t\t\t})\n\n\t\t\tHTMLString += '</' + array[0].tag + '>'\n\n\t\t\tarray[0] = HTMLString\n\t\t}\n\n\t\t// Return root element on index 0\n\t\treturnObject[0] = array[0]\n\n\t\tif (callback)\n\t\t\tcallback(array[0])\n\n\t\t// returns object containing all elements with an id and the root element\n\t\treturn returnObject\n\t}\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * escape-html\n\t * Copyright(c) 2012-2013 TJ Holowaychuk\n\t * MIT Licensed\n\t */\n\n\t/**\n\t * Module exports.\n\t * @public\n\t */\n\n\tmodule.exports = escapeHtml;\n\n\t/**\n\t * Escape special characters in the given string of html.\n\t *\n\t * @param  {string} str The string to escape for inserting into HTML\n\t * @return {string}\n\t * @public\n\t */\n\n\tfunction escapeHtml(html) {\n\t  return String(html)\n\t    .replace(/&/g, '&amp;')\n\t    .replace(/\"/g, '&quot;')\n\t    .replace(/'/g, '&#39;')\n\t    .replace(/</g, '&lt;')\n\t    .replace(/>/g, '&gt;');\n\t}\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar DOM = __webpack_require__(9);\n\tvar utils = __webpack_require__(7);\n\n\tmodule.exports = (function() {\n\t    var canvas = DOM.newEl('canvas');\n\t    var ctx = null;\n\n\t    return function(sceneGraph) {\n\t        if (ctx == null) {\n\t            ctx = canvas.getContext('2d');\n\t        }\n\n\t        var dpr = utils.canvasRatio();\n\t        var root = sceneGraph.root;\n\t        canvas.width = dpr * root.properties.width;\n\t        canvas.height = dpr * root.properties.height ;\n\t        ctx.textBaseline = 'middle';\n\n\t        var bg = root.children.holderBg;\n\t        var bgWidth = dpr * bg.width;\n\t        var bgHeight = dpr * bg.height;\n\t        //todo: parametrize outline width (e.g. in scene object)\n\t        var outlineWidth = 2;\n\t        var outlineOffsetWidth = outlineWidth / 2;\n\n\t        ctx.fillStyle = bg.properties.fill;\n\t        ctx.fillRect(0, 0, bgWidth, bgHeight);\n\n\t        if (bg.properties.outline) {\n\t            //todo: abstract this into a method\n\t            ctx.strokeStyle = bg.properties.outline.fill;\n\t            ctx.lineWidth = bg.properties.outline.width;\n\t            ctx.moveTo(outlineOffsetWidth, outlineOffsetWidth);\n\t            // TL, TR, BR, BL\n\t            ctx.lineTo(bgWidth - outlineOffsetWidth, outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth - outlineOffsetWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(outlineOffsetWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(outlineOffsetWidth, outlineOffsetWidth);\n\t            // Diagonals\n\t            ctx.moveTo(0, outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.moveTo(0, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth, outlineOffsetWidth);\n\t            ctx.stroke();\n\t        }\n\n\t        var textGroup = root.children.holderTextGroup;\n\t        ctx.font = textGroup.properties.font.weight + ' ' + (dpr * textGroup.properties.font.size) + textGroup.properties.font.units + ' ' + textGroup.properties.font.family + ', monospace';\n\t        ctx.fillStyle = textGroup.properties.fill;\n\n\t        for (var lineKey in textGroup.children) {\n\t            var line = textGroup.children[lineKey];\n\t            for (var wordKey in line.children) {\n\t                var word = line.children[wordKey];\n\t                var x = dpr * (textGroup.x + line.x + word.x);\n\t                var y = dpr * (textGroup.y + line.y + word.y + (textGroup.properties.leading / 2));\n\n\t                ctx.fillText(word.properties.text, x, y);\n\t            }\n\t        }\n\n\t        return canvas.toDataURL('image/png');\n\t    };\n\t})();\n\n/***/ }\n/******/ ])\n});\n;\n(function(ctx, isMeteorPackage) {\n    if (isMeteorPackage) {\n        Holder = ctx.Holder;\n    }\n})(this, typeof Meteor !== 'undefined' && typeof Package !== 'undefined');\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/information.js",
    "content": "$(document).ready(function(){\n    var oldPswflag=0;\n    var newPswflag=0;\n    $(\"#name\").text($(\"#nameVal\").text());\n    $(\"#email\").val($(\"#emailVal\").text());\n    $(\"#telephone\").val($(\"#telephoneVal\").text());\n    $(\"#changeInfo\").click(function(){\n        $(\"#update-info\").modal({\n            backdrop:'static'\n        });\n    });\n\n\n    $(\"#saveInfo\").click(function (){\n        var saveInfo={};\n        saveInfo.name=$(\"#name\").val();\n        saveInfo.email=$(\"#email\").val();\n        saveInfo.telephone=$(\"#telephone\").val();\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/saveInfo\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:saveInfo,\n            dateType:\"json\",\n            success: function(result){\n                if (result.msg==\"更新失败\")\n                {\n                    swal(result.msg);\n                }\n                else {\n                    $(\"#update-info\").modal('hide');\n                    swal(\"修改成功\", \"\", \"success\");\n                    $(\"button\").click(function (){\n                        location.reload();\n                    });\n                }\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    });\n\n    $(\"#changePsw\").click(function (){\n        $(\"#update-Psw\").modal({\n            backdrop:'static'\n        });\n    });\n\n    $(\"#oldPsw\").blur(function (){\n        if ($(\"#oldPsw\").val()!=$(\"#Psw\").attr(\"Psw\"))\n        {\n            $(\"#oldPswError\").show();\n        }\n        else\n        {\n            $(\"#oldPswError\").hide();\n            oldPswflag=1;\n        }\n    })\n\n   /* $(\"#newPsw\").focus(function (){\n        if ($(\"#oldPsw\").val()==$(\"#Psw\").attr(\"Psw\"))\n        {\n            $(\"#oldPswError\").hide();\n            oldPswflag=1;\n        }\n    });*/\n\n    $(\"#newPsw\").blur(function (){\n        if($(\"#newPsw\").val().length<8)\n        {\n            $(\"#newPswError\").show();\n        }\n        else {\n            $(\"#newPswError\").hide();\n            newPswflag=1;\n        }\n    });\n\n    $(\"#savePsw\").click(function (){\n        if (oldPswflag==1&&newPswflag==1)\n        {\n            var Psw={};\n            Psw.Psw=$(\"#newPsw\").val();\n            $.ajax({\n                type: \"POST\",\n                url: \"/shop/savePsw\",\n                contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n                data:Psw,\n                dateType:\"json\",\n                success: function(result){\n                    if (result.msg==\"更新失败\")\n                    {\n                        swal(result.msg);\n                    }\n                    else {\n                        $(\"#update-info\").modal('hide');\n                        swal(result.msg);\n                        $(\"button\").click(function (){\n                            location.reload();\n                        });\n                    }\n                },\n                error:function (){\n                    alert(\"更新失败\");\n                }\n            });\n        }\n    })\n\n});\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.2.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( \">tbody\", elem )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with computed style\n\tvar valueIsBorderBox,\n\t\tstyles = getStyles( elem ),\n\t\tval = curCSS( elem, name, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test( val ) ) {\n\t\treturn val;\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = isBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t// Fall back to offsetWidth/Height when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\tif ( val === \"auto\" ) {\n\t\tval = elem[ \"offset\" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar doc, docElem, rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\tdoc = elem.ownerDocument;\n\t\tdocElem = doc.documentElement;\n\t\twin = doc.defaultView;\n\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/jquery.raty.js",
    "content": "/*!\n * jQuery Raty - A Star Rating Plugin\n * ------------------------------------------------------------------\n *\n * jQuery Raty is a plugin that generates a customizable star rating.\n *\n * Licensed under The MIT License\n *\n * @version        2.5.2\n * @since          2010.06.11\n * @author         Washington Botelho\n * @documentation  wbotelhos.com/raty\n *\n * ------------------------------------------------------------------\n *\n *  <div id=\"star\"></div>\n *\n *  $('#star').raty();\n *\n */\n\n;(function($) {\n\n  var methods = {\n    init: function(settings) {\n      return this.each(function() {\n        methods.destroy.call(this);\n\n        this.opt = $.extend(true, {}, $.fn.raty.defaults, settings);\n\n        var that  = $(this),\n            inits = ['number', 'readOnly', 'score', 'scoreName'];\n\n        methods._callback.call(this, inits);\n\n        if (this.opt.precision) {\n          methods._adjustPrecision.call(this);\n        }\n\n        this.opt.number = methods._between(this.opt.number, 0, this.opt.numberMax)\n\n        this.opt.path = this.opt.path || '';\n\n        if (this.opt.path && this.opt.path.slice(this.opt.path.length - 1, this.opt.path.length) !== '/') {\n          this.opt.path += '/';\n        }\n\n        this.stars = methods._createStars.call(this);\n        this.score = methods._createScore.call(this);\n\n        methods._apply.call(this, this.opt.score);\n\n        var space  = this.opt.space ? 4 : 0,\n            width  = this.opt.width || (this.opt.number * this.opt.size + this.opt.number * space);\n\n        if (this.opt.cancel) {\n          this.cancel = methods._createCancel.call(this);\n\n          width += (this.opt.size + space);\n        }\n\n        if (this.opt.readOnly) {\n          methods._lock.call(this);\n        } else {\n          that.css('cursor', 'pointer');\n          methods._binds.call(this);\n        }\n\n        if (this.opt.width !== false) {\n          that.css('width', width);\n        }\n\n        methods._target.call(this, this.opt.score);\n\n        that.data({ 'settings': this.opt, 'raty': true });\n      });\n    }, _adjustPrecision: function() {\n      this.opt.targetType = 'score';\n      this.opt.half       = true;\n    }, _apply: function(score) {\n      if (score && score > 0) {\n        score = methods._between(score, 0, this.opt.number);\n        this.score.val(score);\n      }\n\n      methods._fill.call(this, score);\n\n      if (score) {\n        methods._roundStars.call(this, score);\n      }\n    }, _between: function(value, min, max) {\n      return Math.min(Math.max(parseFloat(value), min), max);\n    }, _binds: function() {\n      if (this.cancel) {\n        methods._bindCancel.call(this);\n      }\n\n      methods._bindClick.call(this);\n      methods._bindOut.call(this);\n      methods._bindOver.call(this);\n    }, _bindCancel: function() {\n      methods._bindClickCancel.call(this);\n      methods._bindOutCancel.call(this);\n      methods._bindOverCancel.call(this);\n    }, _bindClick: function() {\n      var self = this,\n          that = $(self);\n\n      self.stars.on('click.raty', function(evt) {\n        self.score.val((self.opt.half || self.opt.precision) ? that.data('score') : this.alt);\n\n        if (self.opt.click) {\n          self.opt.click.call(self, parseFloat(self.score.val()), evt);\n        }\n      });\n    }, _bindClickCancel: function() {\n      var self = this;\n\n      self.cancel.on('click.raty', function(evt) {\n        self.score.removeAttr('value');\n\n        if (self.opt.click) {\n          self.opt.click.call(self, null, evt);\n        }\n      });\n    }, _bindOut: function() {\n      var self = this;\n\n      $(this).on('mouseleave.raty', function(evt) {\n        var score = parseFloat(self.score.val()) || undefined;\n\n        methods._apply.call(self, score);\n        methods._target.call(self, score, evt);\n\n        if (self.opt.mouseout) {\n          self.opt.mouseout.call(self, score, evt);\n        }\n      });\n    }, _bindOutCancel: function() {\n      var self = this;\n\n      self.cancel.on('mouseleave.raty', function(evt) {\n        $(this).attr('src', self.opt.path + self.opt.cancelOff);\n\n        if (self.opt.mouseout) {\n          self.opt.mouseout.call(self, self.score.val() || null, evt);\n        }\n      });\n    }, _bindOverCancel: function() {\n      var self = this;\n\n      self.cancel.on('mouseover.raty', function(evt) {\n        $(this).attr('src', self.opt.path + self.opt.cancelOn);\n\n        self.stars.attr('src', self.opt.path + self.opt.starOff);\n\n        methods._target.call(self, null, evt);\n\n        if (self.opt.mouseover) {\n          self.opt.mouseover.call(self, null);\n        }\n      });\n    }, _bindOver: function() {\n      var self   = this,\n          that   = $(self),\n          action = self.opt.half ? 'mousemove.raty' : 'mouseover.raty';\n\n      self.stars.on(action, function(evt) {\n        var score = parseInt(this.alt, 10);\n\n        if (self.opt.half) {\n          var position = parseFloat((evt.pageX - $(this).offset().left) / self.opt.size),\n              plus     = (position > .5) ? 1 : .5;\n\n          score = score - 1 + plus;\n\n          methods._fill.call(self, score);\n\n          if (self.opt.precision) {\n            score = score - plus + position;\n          }\n\n          methods._roundStars.call(self, score);\n\n          that.data('score', score);\n        } else {\n          methods._fill.call(self, score);\n        }\n\n        methods._target.call(self, score, evt);\n\n        if (self.opt.mouseover) {\n          self.opt.mouseover.call(self, score, evt);\n        }\n      });\n    }, _callback: function(options) {\n      for (i in options) {\n        if (typeof this.opt[options[i]] === 'function') {\n          this.opt[options[i]] = this.opt[options[i]].call(this);\n        }\n      }\n    }, _createCancel: function() {\n      var that   = $(this),\n          icon   = this.opt.path + this.opt.cancelOff,\n          cancel = $('<img />', { src: icon, alt: 'x', title: this.opt.cancelHint, 'class': 'raty-cancel' });\n\n      if (this.opt.cancelPlace == 'left') {\n        that.prepend('&#160;').prepend(cancel);\n      } else {\n        that.append('&#160;').append(cancel);\n      }\n\n      return cancel;\n    }, _createScore: function() {\n      return $('<input />', { type: 'hidden', name: this.opt.scoreName }).appendTo(this);\n    }, _createStars: function() {\n      var that = $(this);\n\n      for (var i = 1; i <= this.opt.number; i++) {\n        var title = methods._getHint.call(this, i),\n            icon  = (this.opt.score && this.opt.score >= i) ? 'starOn' : 'starOff';\n\n        icon = this.opt.path + this.opt[icon];\n\n        $('<img />', { src : icon, alt: i, title: title }).appendTo(this);\n\n        if (this.opt.space) {\n          that.append((i < this.opt.number) ? '&#160;' : '');\n        }\n      }\n\n      return that.children('img');\n    }, _error: function(message) {\n      $(this).html(message);\n\n      $.error(message);\n    }, _fill: function(score) {\n      var self  = this,\n          hash  = 0;\n\n      for (var i = 1; i <= self.stars.length; i++) {\n        var star   = self.stars.eq(i - 1),\n            select = self.opt.single ? (i == score) : (i <= score);\n\n        if (self.opt.iconRange && self.opt.iconRange.length > hash) {\n          var irange = self.opt.iconRange[hash],\n              on     = irange.on  || self.opt.starOn,\n              off    = irange.off || self.opt.starOff,\n              icon   = select ? on : off;\n\n          if (i <= irange.range) {\n            star.attr('src', self.opt.path + icon);\n          }\n\n          if (i == irange.range) {\n            hash++;\n          }\n        } else {\n          var icon = select ? 'starOn' : 'starOff';\n\n          star.attr('src', this.opt.path + this.opt[icon]);\n        }\n      }\n    }, _getHint: function(score) {\n      var hint = this.opt.hints[score - 1];\n      return (hint === '') ? '' : (hint || score);\n    }, _lock: function() {\n      var score = parseInt(this.score.val(), 10), // TODO: 3.1 >> [['1'], ['2'], ['3', '.1', '.2']]\n          hint  = score ? methods._getHint.call(this, score) : this.opt.noRatedMsg;\n\n      $(this).data('readonly', true).css('cursor', '').attr('title', hint);\n\n      this.score.attr('readonly', 'readonly');\n      this.stars.attr('title', hint);\n\n      if (this.cancel) {\n        this.cancel.hide();\n      }\n    }, _roundStars: function(score) {\n      var rest = (score - Math.floor(score)).toFixed(2);\n\n      if (rest > this.opt.round.down) {\n        var icon = 'starOn';                                 // Up:   [x.76 .. x.99]\n\n        if (this.opt.halfShow && rest < this.opt.round.up) { // Half: [x.26 .. x.75]\n          icon = 'starHalf';\n        } else if (rest < this.opt.round.full) {             // Down: [x.00 .. x.5]\n          icon = 'starOff';\n        }\n\n        this.stars.eq(Math.ceil(score) - 1).attr('src', this.opt.path + this.opt[icon]);\n      }                              // Full down: [x.00 .. x.25]\n    }, _target: function(score, evt) {\n      if (this.opt.target) {\n        var target = $(this.opt.target);\n\n        if (target.length === 0) {\n          methods._error.call(this, 'Target selector invalid or missing!');\n        }\n\n        if (this.opt.targetFormat.indexOf('{score}') < 0) {\n          methods._error.call(this, 'Template \"{score}\" missing!');\n        }\n\n        var mouseover = evt && evt.type == 'mouseover';\n\n        if (score === undefined) {\n          score = this.opt.targetText;\n        } else if (score === null) {\n          score = mouseover ? this.opt.cancelHint : this.opt.targetText;\n        } else {\n          if (this.opt.targetType == 'hint') {\n            score = methods._getHint.call(this, Math.ceil(score));\n          } else if (this.opt.precision) {\n            score = parseFloat(score).toFixed(1);\n          }\n\n          if (!mouseover && !this.opt.targetKeep) {\n            score = this.opt.targetText;\n          }\n        }\n\n        if (score) {\n          score = this.opt.targetFormat.toString().replace('{score}', score);\n        }\n\n        if (target.is(':input')) {\n          target.val(score);\n        } else {\n          target.html(score);\n        }\n      }\n    }, _unlock: function() {\n      $(this).data('readonly', false).css('cursor', 'pointer').removeAttr('title');\n\n      this.score.removeAttr('readonly', 'readonly');\n\n      for (var i = 0; i < this.opt.number; i++) {\n        this.stars.eq(i).attr('title', methods._getHint.call(this, i + 1));\n      }\n\n      if (this.cancel) {\n        this.cancel.css('display', '');\n      }\n    }, cancel: function(click) {\n      return this.each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods[click ? 'click' : 'score'].call(this, null);\n          this.score.removeAttr('value');\n        }\n      });\n    }, click: function(score) {\n      return $(this).each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods._apply.call(this, score);\n\n          if (!this.opt.click) {\n            methods._error.call(this, 'You must add the \"click: function(score, evt) { }\" callback.');\n          }\n\n          this.opt.click.call(this, score, { type: 'click' });\n\n          methods._target.call(this, score);\n        }\n      });\n    }, destroy: function() {\n      return $(this).each(function() {\n        var that = $(this),\n            raw  = that.data('raw');\n\n        if (raw) {\n          that.off('.raty').empty().css({ cursor: raw.style.cursor, width: raw.style.width }).removeData('readonly');\n        } else {\n          that.data('raw', that.clone()[0]);\n        }\n      });\n    }, getScore: function() {\n      var score = [],\n          value ;\n\n      $(this).each(function() {\n        value = this.score.val();\n\n        score.push(value ? parseFloat(value) : undefined);\n      });\n\n      return (score.length > 1) ? score : score[0];\n    }, readOnly: function(readonly) {\n      return this.each(function() {\n        var that = $(this);\n\n        if (that.data('readonly') !== readonly) {\n          if (readonly) {\n            that.off('.raty').children('img').off('.raty');\n\n            methods._lock.call(this);\n          } else {\n            methods._binds.call(this);\n            methods._unlock.call(this);\n          }\n\n          that.data('readonly', readonly);\n        }\n      });\n    }, reload: function() {\n      return methods.set.call(this, {});\n    }, score: function() {\n      return arguments.length ? methods.setScore.apply(this, arguments) : methods.getScore.call(this);\n    }, set: function(settings) {\n      return this.each(function() {\n        var that   = $(this),\n            actual = that.data('settings'),\n            news   = $.extend({}, actual, settings);\n\n        that.raty(news);\n      });\n    }, setScore: function(score) {\n      return $(this).each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods._apply.call(this, score);\n          methods._target.call(this, score);\n        }\n      });\n    }\n  };\n\n  $.fn.raty = function(method) {\n    if (methods[method]) {\n      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if (typeof method === 'object' || !method) {\n      return methods.init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist!');\n    }\n  };\n\n  $.fn.raty.defaults = {\n    cancel        : false,\n    cancelHint    : 'Cancel this rating!',\n    cancelOff     : 'cancel-off.png',\n    cancelOn      : 'cancel-on.png',\n    cancelPlace   : 'left',\n    click         : undefined,\n    half          : false,\n    halfShow      : true,\n    hints         : ['bad', 'poor', 'regular', 'good', 'gorgeous'],\n    iconRange     : undefined,\n    mouseout      : undefined,\n    mouseover     : undefined,\n    noRatedMsg    : 'Not rated yet!',\n    number        : 5,\n    numberMax     : 20,\n    path          : '',\n    precision     : false,\n    readOnly      : false,\n    round         : { down: .25, full: .6, up: .76 },\n    score         : undefined,\n    scoreName     : 'score',\n    single        : false,\n    size          : 16,\n    space         : true,\n    starHalf      : 'star-half.png',\n    starOff       : 'star-off.png',\n    starOn        : 'star-on.png',\n    target        : undefined,\n    targetFormat  : '{score}',\n    targetKeep    : false,\n    targetText    : '',\n    targetType    : 'hint',\n    width         : undefined\n  };\n\n})(jQuery);\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/list.js",
    "content": "$(document).ready(function (){\n   $(\"[name='deleteList']\").click(function (){\n       var orderid=$(this).parents(\"[name='parent']\").find(\"[name='orderid']\").text();\n       var order={};\n       order.orderid= parseInt(orderid);\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/deleteList\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:order,\n           dataType:\"json\",\n           success:function (result){\n               swal(result.msg);\n               $(\"button\").click(function (){\n                   location.reload();\n               });\n           },\n           error:function (){\n               alert(\"删除失败\");\n           }\n       });\n   });\n\n    $(\"[name='finishList']\").click(function (){\n        var orderid=$(this).parents(\"[name='parent']\").find(\"[name='orderid']\").text();\n        var order={};\n        order.orderid=orderid;\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/finishList\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:order,\n            dataType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"点击失败\");\n            }\n        });\n    })\n\n    var goodsId={};\n\n    $(\"[name='evaluate']\").click(function (){\n        $(\"#evaluate\").modal({\n            backdrop:'static'\n        });\n        goodsId=$(this).parents(\".table-bordered\").find(\".col-lg-1\").eq(0).text();\n\n    })\n\n    $(\"#star\").raty({path: '../image/img'});\n\n    $(\"#saveEvaluate\").click(function (){\n        var score=$(\"[name='score']\").val();\n        var content=$(\"#description\").val();\n        var comment={};\n        comment.commentid={};\n        comment.userid={};\n        comment.goodsid=goodsId;\n        comment.point=score;\n        comment.content=content;\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/comment\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:comment,\n            dataType:\"json\",\n            success:function (result){\n                $(\"#evaluate\").modal('hide');\n                swal(result.msg);\n            },\n            error:function (){\n                alert(\"评论失败\");\n            }\n        });\n\n\n    })\n\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/login.js",
    "content": "\n$.validator.setDefaults({\n\tsubmitHandler: function() {\n\t\tform.submit();\n\t}\n});\n$(document).ready(function() {\n\t$('#form2').validate({\n\t\trules: {\n\t\t\tusername: \"required\",\n\t\t\t\n\t\t\tpassword: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\tconfirmlogo: \"required\",\n\t\t},\n\t\tmessages: {\n\t\t\tusername: \"用户名输入不能为空\",\n\t\t\t\n\t\t\tpassword: {\n\t\t\t\trequired: \"密码输入不能为空\",\n\t\t\t},\n\t\t\tconfirmlogo: \"验证码输入不能为空\",\n\t\t}\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/mqttws31.js",
    "content": "/*******************************************************************************\n * Copyright (c) 2013 IBM Corp.\n *\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * and Eclipse Distribution License v1.0 which accompany this distribution. \n *\n * The Eclipse Public License is available at \n *    http://www.eclipse.org/legal/epl-v10.html\n * and the Eclipse Distribution License is available at \n *   http://www.eclipse.org/org/documents/edl-v10.php.\n *\n * Contributors:\n *    Andrew Banks - initial API and implementation and initial documentation\n *******************************************************************************/\n\n\n// Only expose a single object name in the global namespace.\n// Everything must go through this module. Global Messaging module\n// only has a single public function, client, which returns\n// a Messaging client object given connection details.\n \n/**\n * @namespace Messaging \n * Send and receive messages using web browsers.\n * <p> \n * This programming interface lets a JavaScript client application use the MQTT V3.1 protocol to \n * connect to an MQTT-supporting messaging server.\n *  \n * The function supported includes:\n * <ol>\n * <li>Connecting to and disconnecting from a server. The server is identified by its host name and port number. \n * <li>Specifying options that relate to the communications link with the server, \n * for example the frequency of keep-alive heartbeats, and whether SSL/TLS is required.\n * <li>Subscribing to and receiving messages from MQTT Topics.\n * <li>Publishing messages to MQTT Topics.\n * </ol>\n * <p>\n * <h2>The API consists of two main objects:</h2>\n * The <b>Messaging.Client</b> object. This contains methods that provide the functionality of the API,\n * including provision of callbacks that notify the application when a message arrives from or is delivered to the messaging server,\n * or when the status of its connection to the messaging server changes.\n * <p>\n * The <b>Messaging.Message</b> object. This encapsulates the payload of the message along with various attributes\n * associated with its delivery, in particular the destination to which it has been (or is about to be) sent. \n * <p>\n * The programming interface validates parameters passed to it, and will throw an Error containing an error message\n * intended for developer use, if it detects an error with any parameter.\n * <p>\n * Example:\n * \n * <code><pre>\nclient = new Messaging.Client(location.hostname, Number(location.port), \"clientId\");\nclient.onConnectionLost = onConnectionLost;\nclient.onMessageArrived = onMessageArrived;\nclient.connect({onSuccess:onConnect});\n\nfunction onConnect() {\n  // Once a connection has been made, make a subscription and send a message.\n  console.log(\"onConnect\");\n  client.subscribe(\"/World\");\n  message = new Messaging.Message(\"Hello\");\n  message.destinationName = \"/World\";\n  client.send(message); \n};\nfunction onConnectionLost(responseObject) {\n  if (responseObject.errorCode !== 0)\n    console.log(\"onConnectionLost:\"+responseObject.errorMessage);\n};\nfunction onMessageArrived(message) {\n  console.log(\"onMessageArrived:\"+message.payloadString);\n  client.disconnect(); \n};\t\n * </pre></code>\n * <p>\n * Other programming languages,\n * <a href=\"/clients/java/doc/javadoc/index.html\"><big>Java</big></a>,\n * <a href=\"/clients/c/doc/html/index.html\"><big>C</big></a>.\n */\nMessaging = (function (global) {\n\n    // Private variables below, these are only visible inside the function closure\n    // which is used to define the module. \n\n\tvar version = \"0.0.0.0\";\n\tvar buildLevel = \"@BUILDLEVEL@\";\n\t\n    /** \n     * Unique message type identifiers, with associated\n     * associated integer values.\n     * @private \n     */\n    var MESSAGE_TYPE = {\n        CONNECT: 1, \n        CONNACK: 2, \n        PUBLISH: 3,\n        PUBACK: 4,\n        PUBREC: 5, \n        PUBREL: 6,\n        PUBCOMP: 7,\n        SUBSCRIBE: 8,\n        SUBACK: 9,\n        UNSUBSCRIBE: 10,\n        UNSUBACK: 11,\n        PINGREQ: 12,\n        PINGRESP: 13,\n        DISCONNECT: 14\n    };\n    \n    // Collection of utility methods used to simplify module code \n    // and promote the DRY pattern.  \n\n    /**\n     * Validate an object's parameter names to ensure they \n     * match a list of expected variables name for this option\n     * type. Used to ensure option object passed into the API don't\n     * contain erroneous parameters.\n     * @param {Object} obj User options object\n     * @param {key:type, key2:type, ...} valid keys and types that may exist in obj. \n     * @throws {Error} Invalid option parameter found. \n     * @private \n     */\n    var validate = function(obj, keys) {\n        for(key in obj) {\n        \tif (obj.hasOwnProperty(key)) {       \t\t\n        \t    if (keys.hasOwnProperty(key)) {\n        \t        if (typeof obj[key] !== keys[key])\n        \t\t       throw new Error(format(ERROR.INVALID_TYPE, [typeof obj[key], key]));\n        \t    } else {\t\n            \t    var errorStr = \"Unknown property, \" + key + \". Valid properties are:\";\n            \t    for (key in keys)\n            \t\t    if (keys.hasOwnProperty(key))\n            \t\t        errorStr = errorStr+\" \"+key;\n            \t    throw new Error(errorStr);\n                }\n        \t}\n        }\n    };\n\n    /**\n     * Return a new function which runs the user function bound\n     * to a fixed scope. \n     * @param {function} User function\n     * @param {object} Function scope  \n     * @return {function} User function bound to another scope\n     * @private \n     */\n    var scope = function (f, scope) {\n        return function () {\n            return f.apply(scope, arguments);\n        };\n    };\n    \n    /** \n     * Unique message type identifiers, with associated\n     * associated integer values.\n     * @private \n     */\n    var ERROR = {\n    \tOK: {code:0, text:\"AMQJSC0000I OK.\"},\n    \tCONNECT_TIMEOUT: {code:1, text:\"AMQJSC0001E Connect timed out.\"},\n        SUBSCRIBE_TIMEOUT: {code:2, text:\"AMQJS0002E Subscribe timed out.\"}, \n        UNSUBSCRIBE_TIMEOUT: {code:3, text:\"AMQJS0003E Unsubscribe timed out.\"},\n        PING_TIMEOUT: {code:4, text:\"AMQJS0004E Ping timed out.\"},\n        INTERNAL_ERROR: {code:5, text:\"AMQJS0005E Internal error.\"},\n        CONNACK_RETURNCODE: {code:6, text:\"AMQJS0006E Bad Connack return code:{0} {1}.\"},\n        SOCKET_ERROR: {code:7, text:\"AMQJS0007E Socket error:{0}.\"},\n        SOCKET_CLOSE: {code:8, text:\"AMQJS0008I Socket closed.\"},\n        MALFORMED_UTF: {code:9, text:\"AMQJS0009E Malformed UTF data:{0} {1} {2}.\"},\n        UNSUPPORTED: {code:10, text:\"AMQJS0010E {0} is not supported by this browser.\"},\n        INVALID_STATE: {code:11, text:\"AMQJS0011E Invalid state {0}.\"},\n        INVALID_TYPE: {code:12, text:\"AMQJS0012E Invalid type {0} for {1}.\"},\n        INVALID_ARGUMENT: {code:13, text:\"AMQJS0013E Invalid argument {0} for {1}.\"},\n        UNSUPPORTED_OPERATION: {code:14, text:\"AMQJS0014E Unsupported operation.\"},\n        INVALID_STORED_DATA: {code:15, text:\"AMQJS0015E Invalid data in local storage key={0} value={1}.\"},\n        INVALID_MQTT_MESSAGE_TYPE: {code:16, text:\"AMQJS0016E Invalid MQTT message type {0}.\"},\n        MALFORMED_UNICODE: {code:17, text:\"AMQJS0017E Malformed Unicode string:{0} {1}.\"},\n    };\n    \n    /** CONNACK RC Meaning. */\n    var CONNACK_RC = {\n   \t\t0:\"Connection Accepted\",\n   \t\t1:\"Connection Refused: unacceptable protocol version\",\n   \t\t2:\"Connection Refused: identifier rejected\",\n   \t\t3:\"Connection Refused: server unavailable\",\n   \t\t4:\"Connection Refused: bad user name or password\",\n   \t\t5:\"Connection Refused: not authorized\"\n    };\n \n    /**\n     * Format an error message text.\n     * @private\n     * @param {error} ERROR.KEY value above.\n     * @param {substitutions} [array] substituted into the text.\n     * @return the text with the substitutions made.\n     */\n    var format = function(error, substitutions) {\n    \tvar text = error.text;\n    \tif (substitutions) {\n    \t  for (var i=0; i<substitutions.length; i++) {\n    \t\tfield = \"{\"+i+\"}\";\n    \t\tstart = text.indexOf(field);\n    \t\tif(start > 0) {\n    \t\t\tvar part1 = text.substring(0,start);\n    \t\t\tvar part2 = text.substring(start+field.length);\n    \t\t\ttext = part1+substitutions[i]+part2;\n    \t\t}\n    \t  }\n    \t}\n    \treturn text;\n    };\n    \n    //MQTT protocol and version        6    M    Q    I    s    d    p    3\n    var MqttProtoIdentifier = [0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03];\n    \n    /**\n     * @ignore\n     * Construct an MQTT wire protocol message.\n     * @param type MQTT packet type.\n     * @param options optional wire message attributes.\n     * \n     * Optional properties\n     * \n     * messageIdentifier: message ID in the range [0..65535]\n     * payloadMessage:\tApplication Message - PUBLISH only\n     * connectStrings:\tarray of 0 or more Strings to be put into the CONNECT payload\n     * topics:\t\t\tarray of strings (SUBSCRIBE, UNSUBSCRIBE)\n     * requestQoS:\t\tarray of QoS values [0..2]\n     *  \n     * \"Flag\" properties \n     * cleanSession:\ttrue if present / false if absent (CONNECT)\n     * willMessage:  \ttrue if present / false if absent (CONNECT)\n     * isRetained:\t\ttrue if present / false if absent (CONNECT)\n     * userName:\t\ttrue if present / false if absent (CONNECT)\n     * password:\t\ttrue if present / false if absent (CONNECT)\n     * keepAliveInterval:\tinteger [0..65535]  (CONNECT)\n     *\n     * @private\n     */\n    var WireMessage = function (type, options) { \t\n        this.type = type;\n        for(name in options) {\n            if (options.hasOwnProperty(name)) {\n                this[name] = options[name];\n            }\n        }\n    };\n    \n    WireMessage.prototype.encode = function() {\n    \t// Compute the first byte of the fixed header\n    \tvar first = ((this.type & 0x0f) << 4);\n    \t\n    \t/*\n    \t * Now calculate the length of the variable header + payload by adding up the lengths\n    \t * of all the component parts\n    \t */\n\n    \tremLength = 0;\n    \ttopicStrLength = new Array();\n    \t\n    \t// if the message contains a messageIdentifier then we need two bytes for that\n    \tif (this.messageIdentifier != undefined)\n    \t\tremLength += 2;\n\n    \tswitch(this.type) {\n    \t    // If this a Connect then we need to include 12 bytes for its header\n\t        case MESSAGE_TYPE.CONNECT:\n\t        \tremLength += MqttProtoIdentifier.length + 3;\n                remLength += UTF8Length(this.clientId) + 2;\n\t\t\t    if (this.willMessage != undefined) {\n\t\t\t    \tremLength += UTF8Length(this.willMessage.destinationName) + 2;\n                    // Will message is always a string, sent as UTF-8 characters with a preceding length.\n\t\t\t\t    var willMessagePayloadBytes = this.willMessage.payloadBytes;\n\t\t\t\t    if (!(willMessagePayloadBytes instanceof Uint8Array))\n\t\t        \t\twillMessagePayloadBytes = new Uint8Array(payloadBytes);\n                    remLength += willMessagePayloadBytes.byteLength +2;\n    \t        }\n                if (this.userName != undefined)\n                    remLength += UTF8Length(this.userName) + 2;\n                if (this.password != undefined)\n                    remLength += UTF8Length(this.password) + 2;\n\t\t\tbreak;\n\n\t\t\t// Subscribe, Unsubscribe can both contain topic strings\n\t        case MESSAGE_TYPE.SUBSCRIBE:\t        \t\n\t        \tfirst |= 0x02; // Qos = 1;\n\t        \tfor ( var i = 0; i < this.topics.length; i++) {\n\t        \t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t        \t\tremLength += topicStrLength[i] + 2;\n\t        \t}\n\t        \tremLength += this.requestedQos.length; // 1 byte for each topic's Qos\n\t        \t// QoS on Subscribe only\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.UNSUBSCRIBE:\n\t        \tfirst |= 0x02; // Qos = 1;\n\t        \tfor ( var i = 0; i < this.topics.length; i++) {\n\t        \t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t        \t\tremLength += topicStrLength[i] + 2;\n\t        \t}\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.PUBLISH:\n\t        \tif (this.payloadMessage.duplicate) first |= 0x08;\n\t        \tfirst  = first |= (this.payloadMessage.qos << 1);\n\t        \tif (this.payloadMessage.retained) first |= 0x01;\n\t        \tdestinationNameLength = UTF8Length(this.payloadMessage.destinationName);\n\t        \tremLength += destinationNameLength + 2;\t   \n\t        \tvar payloadBytes = this.payloadMessage.payloadBytes;\n\t        \tremLength += payloadBytes.byteLength;  \n\t        \tif (payloadBytes instanceof ArrayBuffer)\n\t        \t\tpayloadBytes = new Uint8Array(payloadBytes);\n\t        \telse if (!(payloadBytes instanceof Uint8Array))\n\t        \t\tpayloadBytes = new Uint8Array(payloadBytes.buffer);\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.DISCONNECT:\n\t        \tbreak;\n\n\t        default:\n\t        \t;\n    \t}\n\n    \t// Now we can allocate a buffer for the message\n\n    \tvar mbi = encodeMBI(remLength);  // Convert the length to MQTT MBI format\n    \tvar pos = mbi.length + 1;        // Offset of start of variable header\n    \tvar buffer = new ArrayBuffer(remLength + pos);\n    \tvar byteStream = new Uint8Array(buffer);    // view it as a sequence of bytes\n\n    \t//Write the fixed header into the buffer\n    \tbyteStream[0] = first;\n    \tbyteStream.set(mbi,1);\n\n    \t// If this is a PUBLISH then the variable header starts with a topic\n    \tif (this.type == MESSAGE_TYPE.PUBLISH)\n    \t\tpos = writeString(this.payloadMessage.destinationName, destinationNameLength, byteStream, pos);\n    \t// If this is a CONNECT then the variable header contains the protocol name/version, flags and keepalive time\n    \t\n    \telse if (this.type == MESSAGE_TYPE.CONNECT) {\n    \t\tbyteStream.set(MqttProtoIdentifier, pos);\n    \t\tpos += MqttProtoIdentifier.length;\n    \t\tvar connectFlags = 0;\n    \t\tif (this.cleanSession) \n    \t\t\tconnectFlags = 0x02;\n    \t\tif (this.willMessage != undefined ) {\n    \t\t\tconnectFlags |= 0x04;\n    \t\t\tconnectFlags |= (this.willMessage.qos<<3);\n    \t\t\tif (this.willMessage.retained) {\n    \t\t\t\tconnectFlags |= 0x20;\n    \t\t\t}\n    \t\t}\n    \t\tif (this.userName != undefined)\n    \t\t\tconnectFlags |= 0x80;\n            if (this.password != undefined)\n    \t\t    connectFlags |= 0x40;\n    \t\tbyteStream[pos++] = connectFlags; \n    \t\tpos = writeUint16 (this.keepAliveInterval, byteStream, pos);\n    \t}\n\n    \t// Output the messageIdentifier - if there is one\n    \tif (this.messageIdentifier != undefined)\n    \t\tpos = writeUint16 (this.messageIdentifier, byteStream, pos);\n\n    \tswitch(this.type) {\n    \t    case MESSAGE_TYPE.CONNECT:\n    \t\t    pos = writeString(this.clientId, UTF8Length(this.clientId), byteStream, pos); \n    \t\t    if (this.willMessage != undefined) {\n    \t\t        pos = writeString(this.willMessage.destinationName, UTF8Length(this.willMessage.destinationName), byteStream, pos);\n    \t\t        pos = writeUint16(willMessagePayloadBytes.byteLength, byteStream, pos);\n    \t\t        byteStream.set(willMessagePayloadBytes, pos);\n\t\t        \tpos += willMessagePayloadBytes.byteLength;\n    \t\t        \n    \t        }\n    \t\tif (this.userName != undefined) \n    \t\t\tpos = writeString(this.userName, UTF8Length(this.userName), byteStream, pos);\n    \t\tif (this.password != undefined) \n    \t\t\tpos = writeString(this.password, UTF8Length(this.password), byteStream, pos);\n    \t\tbreak;\n\n    \t    case MESSAGE_TYPE.PUBLISH:\t\n    \t    \t// PUBLISH has a text or binary payload, if text do not add a 2 byte length field, just the UTF characters.\t\n    \t    \tbyteStream.set(payloadBytes, pos);\n    \t    \t\t\n    \t    \tbreak;\n\n//    \t    case MESSAGE_TYPE.PUBREC:\t\n//    \t    case MESSAGE_TYPE.PUBREL:\t\n//    \t    case MESSAGE_TYPE.PUBCOMP:\t\n//    \t    \tbreak;\n\n    \t    case MESSAGE_TYPE.SUBSCRIBE:\n    \t    \t// SUBSCRIBE has a list of topic strings and request QoS\n    \t    \tfor (var i=0; i<this.topics.length; i++) {\n    \t    \t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n    \t    \t\tbyteStream[pos++] = this.requestedQos[i];\n    \t    \t}\n    \t    \tbreak;\n\n    \t    case MESSAGE_TYPE.UNSUBSCRIBE:\t\n    \t    \t// UNSUBSCRIBE has a list of topic strings\n    \t    \tfor (var i=0; i<this.topics.length; i++)\n    \t    \t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n    \t    \tbreak;\n\n    \t    default:\n    \t    \t// Do nothing.\n    \t}\n\n    \treturn buffer;\n    }\t\n\n    function decodeMessage(input) {\n    \t//var msg = new Object();  // message to be constructed\n    \tvar first = input[0];\n    \tvar type = first >> 4;\n    \tvar messageInfo = first &= 0x0f;\n    \tvar pos = 1;\n    \t\n\n    \t// Decode the remaining length (MBI format)\n\n    \tvar digit;\n    \tvar remLength = 0;\n    \tvar multiplier = 1;\n    \tdo {\n    \t\tdigit = input[pos++];\n    \t\tremLength += ((digit & 0x7F) * multiplier);\n    \t\tmultiplier *= 128;\n    \t} while ((digit & 0x80) != 0);\n\n    \tvar wireMessage = new WireMessage(type);\n    \tswitch(type) {\n            case MESSAGE_TYPE.CONNACK:\n    \t    \twireMessage.topicNameCompressionResponse = input[pos++];\n    \t        wireMessage.returnCode = input[pos++];\n    \t\t    break;\n    \t    \n    \t    case MESSAGE_TYPE.PUBLISH:     \t    \t\n    \t    \tvar qos = (messageInfo >> 1) & 0x03;\n    \t    \t   \t\t    \n    \t    \tvar len = readUint16(input, pos);\n    \t\t    pos += 2;\n    \t\t    var topicName = parseUTF8(input, pos, len);\n    \t\t    pos += len;\n    \t\t    // If QoS 1 or 2 there will be a messageIdentifier\n                if (qos > 0) {\n    \t\t        wireMessage.messageIdentifier = readUint16(input, pos);\n    \t\t        pos += 2;\n                }\n                \n                var message = new Messaging.Message(input.subarray(pos));\n                if ((messageInfo & 0x01) == 0x01) \n    \t    \t\tmessage.retained = true;\n    \t    \tif ((messageInfo & 0x08) == 0x08)\n    \t    \t\tmessage.duplicate =  true;\n                message.qos = qos;\n                message.destinationName = topicName;\n                wireMessage.payloadMessage = message;\t\n    \t\t    break;\n    \t    \n    \t    case  MESSAGE_TYPE.PUBACK:\n    \t    case  MESSAGE_TYPE.PUBREC:\t    \n    \t    case  MESSAGE_TYPE.PUBREL:    \n    \t    case  MESSAGE_TYPE.PUBCOMP:\n    \t    case  MESSAGE_TYPE.UNSUBACK:    \t    \t\n    \t    \twireMessage.messageIdentifier = readUint16(input, pos);\n        \t\tbreak;\n    \t\t    \n    \t    case  MESSAGE_TYPE.SUBACK:\n    \t    \twireMessage.messageIdentifier = readUint16(input, pos);\n        \t\tpos += 2;\n    \t        wireMessage.grantedQos = input.subarray(pos);\t\n    \t\t    break;\n    \t\n    \t    default:\n    \t    \t;\n    \t}\n    \t    \t\n    \treturn wireMessage;\t\n    }\n\n    function writeUint16(input, buffer, offset) {\n    \tbuffer[offset++] = input >> 8;      //MSB\n    \tbuffer[offset++] = input % 256;     //LSB \n    \treturn offset;\n    }\t\n\n    function writeString(input, utf8Length, buffer, offset) {\n    \toffset = writeUint16(utf8Length, buffer, offset);\n    \tstringToUTF8(input, buffer, offset);\n    \treturn offset + utf8Length;\n    }\t\n\n    function readUint16(buffer, offset) {\n    \treturn 256*buffer[offset] + buffer[offset+1];\n    }\t\n\n    /**\n     * Encodes an MQTT Multi-Byte Integer\n     * @private \n     */\n    function encodeMBI(number) {\n    \tvar output = new Array(1);\n    \tvar numBytes = 0;\n\n    \tdo {\n    \t\tvar digit = number % 128;\n    \t\tnumber = number >> 7;\n    \t\tif (number > 0) {\n    \t\t\tdigit |= 0x80;\n    \t\t}\n    \t\toutput[numBytes++] = digit;\n    \t} while ( (number > 0) && (numBytes<4) );\n\n    \treturn output;\n    }\n\n    /**\n     * Takes a String and calculates its length in bytes when encoded in UTF8.\n     * @private\n     */\n    function UTF8Length(input) {\n    \tvar output = 0;\n    \tfor (var i = 0; i<input.length; i++) \n    \t{\n    \t\tvar charCode = input.charCodeAt(i);\n                if (charCode > 0x7FF)\n                   {\n                      // Surrogate pair means its a 4 byte character\n                      if (0xD800 <= charCode && charCode <= 0xDBFF)\n                        {\n                          i++;\n                          output++;\n                        }\n    \t\t       output +=3;\n                   }\n    \t\telse if (charCode > 0x7F)\n    \t\t\toutput +=2;\n    \t\telse\n    \t\t\toutput++;\n    \t} \n    \treturn output;\n    }\n    \n    /**\n     * Takes a String and writes it into an array as UTF8 encoded bytes.\n     * @private\n     */\n    function stringToUTF8(input, output, start) {\n    \tvar pos = start;\n    \tfor (var i = 0; i<input.length; i++) {\n    \t\tvar charCode = input.charCodeAt(i);\n    \t\t\n    \t\t// Check for a surrogate pair.\n    \t\tif (0xD800 <= charCode && charCode <= 0xDBFF) {\n    \t        lowCharCode = input.charCodeAt(++i);\n    \t        if (isNaN(lowCharCode)) {\n    \t        \tthrow new Error(format(ERROR.MALFORMED_UNICODE, [charCode, lowCharCode]));\n    \t        }\n    \t        charCode = ((charCode - 0xD800)<<10) + (lowCharCode - 0xDC00) + 0x10000;\n    \t    \n    \t    }\n    \t\t\n    \t\tif (charCode <= 0x7F) {\n    \t\t\toutput[pos++] = charCode;\n    \t\t} else if (charCode <= 0x7FF) {\n    \t\t\toutput[pos++] = charCode>>6  & 0x1F | 0xC0;\n    \t\t\toutput[pos++] = charCode     & 0x3F | 0x80;\n    \t\t} else if (charCode <= 0xFFFF) {    \t\t\t\t    \n    \t        output[pos++] = charCode>>12 & 0x0F | 0xE0;\n        \t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;   \n        \t\toutput[pos++] = charCode     & 0x3F | 0x80;   \n    \t\t} else {\n    \t\t\toutput[pos++] = charCode>>18 & 0x07 | 0xF0;\n        \t\toutput[pos++] = charCode>>12 & 0x3F | 0x80;\n        \t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;\n        \t\toutput[pos++] = charCode     & 0x3F | 0x80;\n    \t\t};\n    \t} \n    \treturn output;\n    }\n    \n    function parseUTF8(input, offset, length) {\n    \tvar output = \"\";\n    \tvar utf16;\n    \tvar pos = offset;\n\n    \twhile (pos < offset+length)\n    \t{\n    \t\tvar byte1 = input[pos++];\n    \t\tif (byte1 < 128)\n    \t\t\tutf16 = byte1;\n    \t\telse \n    \t\t{\n    \t\t\tvar byte2 = input[pos++]-128;\n    \t\t\tif (byte2 < 0) \n    \t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16),\"\"]));\n    \t\t\tif (byte1 < 0xE0)             // 2 byte character\n    \t\t\t\tutf16 = 64*(byte1-0xC0) + byte2;\n    \t\t\telse \n    \t\t\t{ \n    \t\t\t\tvar byte3 = input[pos++]-128;\n    \t\t\t\tif (byte3 < 0) \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16)]));\n    \t\t\t\tif (byte1 < 0xF0)        // 3 byte character\n    \t\t\t\t\tutf16 = 4096*(byte1-0xE0) + 64*byte2 + byte3;\n                                else\n                                {\n                                   var byte4 = input[pos++]-128;\n                                   if (byte4 < 0) \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n                                   if (byte1 < 0xF8)        // 4 byte character \n                                           utf16 = 262144*(byte1-0xF0) + 4096*byte2 + 64*byte3 + byte4;\n    \t\t\t\t   else                     // longer encodings are not supported  \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n                                }\n    \t\t\t}\n    \t\t}  \n\n                if (utf16 > 0xFFFF)   // 4 byte character - express as a surrogate pair\n                  {\n                     utf16 -= 0x10000;\n                     output += String.fromCharCode(0xD800 + (utf16 >> 10)); // lead character\n                     utf16 = 0xDC00 + (utf16 & 0x3FF);  // trail character\n                  }\n    \t\toutput += String.fromCharCode(utf16);\n    \t}\n    \treturn output;\n    }\n    \n    /** @ignore Repeat keepalive requests, monitor responses.*/\n    var Pinger = function(client, window, keepAliveInterval) { \n    \tthis._client = client;        \t\n     \tthis._window = window;\n     \tthis._keepAliveInterval = keepAliveInterval*1000;     \t\n        this.isReset = false;\n        \n        var pingReq = new WireMessage(MESSAGE_TYPE.PINGREQ).encode(); \n        \n        var doTimeout = function (pinger) {\n\t        return function () {\n\t            return doPing.apply(pinger);\n\t        };\n\t    };\n\t    \n\t    /** @ignore */\n        var doPing = function() { \n        \tif (!this.isReset) {\n        \t\tthis._client._trace(\"Pinger.doPing\", \"Timed out\");\n        \t\tthis._client._disconnected( ERROR.PING_TIMEOUT.code , format(ERROR.PING_TIMEOUT));\n        \t} else {\n        \t    this.isReset = false;\n        \t    this._client._trace(\"Pinger.doPing\", \"send PINGREQ\");\n                this._client.socket.send(pingReq); \n        \t    this.timeout = this._window.setTimeout(doTimeout(this), this._keepAliveInterval);\n            }\n        }\n\n        this.reset = function() {\n        \tthis.isReset = true;\n        \tthis._window.clearTimeout(this.timeout);\n        \tif (this._keepAliveInterval > 0)\n        \t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n        }\n\n        this.cancel = function() {\n        \tthis._window.clearTimeout(this.timeout);\n        }\n     }; \n\n\t/** @ignore Monitor request completion. */\n\tvar Timeout = function(client, window, timeoutSeconds, action, args) {\n\t\tthis._window = window;\n\t\tif (!timeoutSeconds)\n\t\t\ttimeoutSeconds = 30;\n\t\t\n\t\tvar doTimeout = function (action, client, args) {\n\t        return function () {\n\t            return action.apply(client, args);\n\t        };\n\t    };\n        this.timeout = setTimeout(doTimeout(action, client, args), timeoutSeconds * 1000);\n        \n\t\tthis.cancel = function() {\n\t\t\tthis._window.clearTimeout(this.timeout);\n\t\t}\n\t}; \n    \n    /*\n\t * Internal implementation of the Websockets MQTT V3.1 client.\n\t * \n\t * @name Messaging.ClientImpl @constructor \n\t * @param {String} host the DNS nameof the webSocket host. \n\t * @param {Number} port the port number for that host.\n\t * @param {String} clientId the MQ client identifier.\n\t */\n    var ClientImpl = function (host, port, clientId) {\n    \t// Check dependencies are satisfied in this browser.\n    \tif (!(\"WebSocket\" in global && global[\"WebSocket\"] !== null)) {\n            throw new Error(format(ERROR.UNSUPPORTED, [\"WebSocket\"]));\n \t    } \n        if (!(\"localStorage\" in global && global[\"localStorage\"] !== null)) {\n         \tthrow new Error(format(ERROR.UNSUPPORTED, [\"localStorage\"]));\n        }\n        if (!(\"ArrayBuffer\" in global && global[\"ArrayBuffer\"] !== null)) {\n         \tthrow new Error(format(ERROR.UNSUPPORTED, [\"ArrayBuffer\"]));\n        }\n    \t\n        this._trace(\"Messaging.Client\", host, port, clientId);\n\n        this.host = host;\n        this.port = port;\n        this.clientId = clientId;\n\n        // Local storagekeys are qualified with the following string.\n        this._localKey=host+\":\"+port+\":\"+clientId+\":\";\n\n        // Create private instance-only message queue\n        // Internal queue of messages to be sent, in sending order. \n        this._msg_queue = [];\n\n        // Messages we have sent and are expecting a response for, indexed by their respective message ids. \n        this._sentMessages = {};\n\n        // Messages we have received and acknowleged and are expecting a confirm message for\n        // indexed by their respective message ids. \n        this._receivedMessages = {};\n \n        // Internal list of callbacks to be executed when messages\n        // have been successfully sent over web socket, e.g. disconnect\n        // when it doesn't have to wait for ACK, just message is dispatched.\n        this._notify_msg_sent = {};\n\n        // Unique identifier for SEND messages, incrementing\n        // counter as messages are sent.\n        this._message_identifier = 1;\n        \n        // Used to determine the transmission sequence of stored sent messages.\n    \tthis._sequence = 0;\n    \t\n\n        // Load the local state, if any, from the saved version, only restore state relevant to this client.   \t\n        for(key in localStorage)\n        \tif (   key.indexOf(\"Sent:\"+this._localKey) == 0  \t\t    \n        \t    || key.indexOf(\"Received:\"+this._localKey) == 0)\n        \tthis.restore(key);\n    };\n\n    // Messaging Client public instance members. \n    ClientImpl.prototype.host;\n    ClientImpl.prototype.port;\n    ClientImpl.prototype.clientId;\n\n    // Messaging Client private instance members.\n    ClientImpl.prototype.socket;\n    /* true once we have received an acknowledgement to a CONNECT packet. */\n    ClientImpl.prototype.connected = false;\n    /* The largest message identifier allowed, may not be larger than 2**16 but \n     * if set smaller reduces the maximum number of outbound messages allowed.\n     */ \n    ClientImpl.prototype.maxMessageIdentifier = 65536;\n    ClientImpl.prototype.connectOptions;\n    ClientImpl.prototype.hostIndex;\n    ClientImpl.prototype.onConnectionLost;\n    ClientImpl.prototype.onMessageDelivered;\n    ClientImpl.prototype.onMessageArrived;\n    ClientImpl.prototype._msg_queue = null;\n    ClientImpl.prototype._connectTimeout;\n    /* The sendPinger monitors how long we allow before we send data to prove to the server that we are alive. */\n    ClientImpl.prototype.sendPinger = null;\n    /* The receivePinger monitors how long we allow before we require evidence that the server is alive. */\n    ClientImpl.prototype.receivePinger = null;\n    \n    ClientImpl.prototype._traceBuffer = null;\n    ClientImpl.prototype._MAX_TRACE_ENTRIES = 100;\n\n    ClientImpl.prototype.connect = function (connectOptions) {\n    \tvar connectOptionsMasked = this._traceMask(connectOptions, \"password\"); \n    \tthis._trace(\"Client.connect\", connectOptionsMasked, this.socket, this.connected);\n        \n    \tif (this.connected) \n        \tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n    \tif (this.socket)\n    \t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n        \n    \tthis.connectOptions = connectOptions;\n    \t\n    \tif (connectOptions.hosts) {\n    \t    this.hostIndex = 0;\n    \t    this._doConnect(connectOptions.hosts[0], connectOptions.ports[0]);  \n    \t} else {\n            this._doConnect(this.host, this.port);  \t\t\n    \t}\n        \n    };\n\n    ClientImpl.prototype.subscribe = function (filter, subscribeOptions) {\n    \tthis._trace(\"Client.subscribe\", filter, subscribeOptions);\n              \n    \tif (!this.connected)\n    \t    throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n    \t\n        var wireMessage = new WireMessage(MESSAGE_TYPE.SUBSCRIBE);\n        wireMessage.topics=[filter];\n        if (subscribeOptions.qos != undefined)\n        \twireMessage.requestedQos = [subscribeOptions.qos];\n        else \n        \twireMessage.requestedQos = [0];\n        \n        if (subscribeOptions.onSuccess) {\n            wireMessage.callback = function() {subscribeOptions.onSuccess({invocationContext:subscribeOptions.invocationContext});};\n        }\n        if (subscribeOptions.timeout) {\n        \twireMessage.timeOut = new Timeout(this, window, subscribeOptions.timeout, subscribeOptions.onFailure\n        \t\t\t, [{invocationContext:subscribeOptions.invocationContext, \n        \t\t\t\terrorCode:ERROR.SUBSCRIBE_TIMEOUT.code, \n        \t\t\t\terrorMessage:format(ERROR.SUBSCRIBE_TIMEOUT)}]);\n        }\n        \n        // All subscriptions return a SUBACK. \n        this._requires_ack(wireMessage);\n        this._schedule_message(wireMessage);\n    };\n\n    /** @ignore */\n    ClientImpl.prototype.unsubscribe = function(filter, unsubscribeOptions) {  \n    \tthis._trace(\"Client.unsubscribe\", filter, unsubscribeOptions);\n        \n    \tif (!this.connected)\n    \t   throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n    \t\n    \tvar wireMessage = new WireMessage(MESSAGE_TYPE.UNSUBSCRIBE);\n        wireMessage.topics = [filter];\n        \n        if (unsubscribeOptions.onSuccess) {\n        \twireMessage.callback = function() {unsubscribeOptions.onSuccess({invocationContext:unsubscribeOptions.invocationContext});};\n        }\n        if (unsubscribeOptions.timeout) {\n        \twireMessage.timeOut = new Timeout(this, window, unsubscribeOptions.timeout, unsubscribeOptions.onFailure\n        \t\t\t, [{invocationContext:unsubscribeOptions.invocationContext,\n        \t\t\t\terrorCode:ERROR.UNSUBSCRIBE_TIMEOUT.code,\n        \t\t\t\terrorMessage:format(ERROR.UNSUBSCRIBE_TIMEOUT)}]);\n        }\n     \n        // All unsubscribes return a SUBACK.         \n        this._requires_ack(wireMessage);\n        this._schedule_message(wireMessage);\n    };\n     \n    ClientImpl.prototype.send = function (message) {\n        this._trace(\"Client.send\", message);\n\n        if (!this.connected)\n           throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n        \n        wireMessage = new WireMessage(MESSAGE_TYPE.PUBLISH);\n        wireMessage.payloadMessage = message;\n        \n        if (message.qos > 0)\n            this._requires_ack(wireMessage);\n        else if (this.onMessageDelivered)\n        \tthis._notify_msg_sent[wireMessage] = this.onMessageDelivered(wireMessage.payloadMessage);\n        this._schedule_message(wireMessage);\n    };\n    \n    ClientImpl.prototype.disconnect = function () {\n        this._trace(\"Client.disconnect\");\n\n        if (!this.socket)\n    \t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connecting or connected\"]));\n        \n        wireMessage = new WireMessage(MESSAGE_TYPE.DISCONNECT);\n\n        // Run the disconnected call back as soon as the message has been sent,\n        // in case of a failure later on in the disconnect processing.\n        // as a consequence, the _disconected call back may be run several times.\n        this._notify_msg_sent[wireMessage] = scope(this._disconnected, this);\n\n        this._schedule_message(wireMessage);\n    };\n    \n   ClientImpl.prototype.getTraceLog = function () {\n        if ( this._traceBuffer !== null ) {\n            this._trace(\"Client.getTraceLog\", new Date());\n            this._trace(\"Client.getTraceLog in flight messages\", this._sentMessages.length);\n            for (key in this._sentMessages)\n                this._trace(\"_sentMessages \",key, this._sentMessages[key]);\n            for (key in this._receivedMessages)\n                this._trace(\"_receivedMessages \",key, this._receivedMessages[key]);\n\n            return this._traceBuffer;\n        }\n    };\n\n    ClientImpl.prototype.startTrace = function () {\n        if ( this._traceBuffer === null ) {\n            this._traceBuffer = [];\n        }\n        this._trace(\"Client.startTrace\", new Date(), version);\n    };\n\n    ClientImpl.prototype.stopTrace = function () {\n        delete this._traceBuffer;\n    };\n\n    ClientImpl.prototype._doConnect = function (host, port) { \t        \n        // When the socket is open, this client will send the CONNECT WireMessage using the saved parameters. \n        if (this.connectOptions.useSSL)\n          wsurl = [\"wss://\", host, \":\", port, \"/mqtt\"].join(\"\");\n        else\n          wsurl = [\"ws://\", host, \":\", port, \"/mqtt\"].join(\"\");\n        this.connected = false;\n        this.socket = new WebSocket(wsurl, 'mqttv3.1');\n        this.socket.binaryType = 'arraybuffer';\n        this.socket.onopen = scope(this._on_socket_open, this);\n        this.socket.onmessage = scope(this._on_socket_message, this);\n        this.socket.onerror = scope(this._on_socket_error, this);\n        this.socket.onclose = scope(this._on_socket_close, this);\n        \n        this.sendPinger = new Pinger(this, window, this.connectOptions.keepAliveInterval);\n        this.receivePinger = new Pinger(this, window, this.connectOptions.keepAliveInterval);\n        \n        this._connectTimeout = new Timeout(this, window, this.connectOptions.timeout, this._disconnected,  [ERROR.CONNECT_TIMEOUT.code, format(ERROR.CONNECT_TIMEOUT)]);\n    };\n\n    \n    // Schedule a new message to be sent over the WebSockets\n    // connection. CONNECT messages cause WebSocket connection\n    // to be started. All other messages are queued internally\n    // until this has happened. When WS connection starts, process\n    // all outstanding messages. \n    ClientImpl.prototype._schedule_message = function (message) {\n        this._msg_queue.push(message);\n        // Process outstanding messages in the queue if we have an  open socket, and have received CONNACK. \n        if (this.connected) {\n            this._process_queue();\n        }\n    };\n\n    ClientImpl.prototype.store = function(prefix, wireMessage) {\n    \tstoredMessage = {type:wireMessage.type, messageIdentifier:wireMessage.messageIdentifier, version:1};\n    \t\n    \tswitch(wireMessage.type) {\n\t      case MESSAGE_TYPE.PUBLISH:\n\t    \t  if(wireMessage.pubRecReceived)\n\t    \t\t  storedMessage.pubRecReceived = true;\n\t    \t  \n\t    \t  // Convert the payload to a hex string.\n\t    \t  storedMessage.payloadMessage = {};\n\t    \t  var hex = \"\";\n\t          var messageBytes = wireMessage.payloadMessage.payloadBytes;\n\t          for (var i=0; i<messageBytes.length; i++) {\n\t            if (messageBytes[i] <= 0xF)\n\t              hex = hex+\"0\"+messageBytes[i].toString(16);\n\t            else \n\t              hex = hex+messageBytes[i].toString(16);\n\t          }\n\t    \t  storedMessage.payloadMessage.payloadHex = hex;\n\t    \t  \n\t    \t  storedMessage.payloadMessage.qos = wireMessage.payloadMessage.qos;\n\t    \t  storedMessage.payloadMessage.destinationName = wireMessage.payloadMessage.destinationName;\n\t    \t  if (wireMessage.payloadMessage.duplicate) \n\t    \t\t  storedMessage.payloadMessage.duplicate = true;\n\t    \t  if (wireMessage.payloadMessage.retained) \n\t    \t\t  storedMessage.payloadMessage.retained = true;\t   \n\t    \t  \n\t    \t  // Add a sequence number to sent messages.\n\t    \t  if ( prefix.indexOf(\"Sent:\") == 0 ) {\n\t    \t\t  if ( wireMessage.sequence === undefined )\n\t    \t\t      wireMessage.sequence = ++this._sequence;\n\t    \t\t  storedMessage.sequence = wireMessage.sequence;\n\t    \t  }\n\t          break;    \n\t          \n\t        default:\n\t        \tthrow Error(format(ERROR.INVALID_STORED_DATA, [key, storedMessage]));\n  \t    }\n    \tlocalStorage.setItem(prefix+this._localKey+wireMessage.messageIdentifier, JSON.stringify(storedMessage));\n    };\n    \n    ClientImpl.prototype.restore = function(key) {    \t\n    \tvar value = localStorage.getItem(key);\n    \tvar storedMessage = JSON.parse(value);\n    \t\n    \tvar wireMessage = new WireMessage(storedMessage.type, storedMessage);\n    \t\n    \tswitch(storedMessage.type) {\n\t      case MESSAGE_TYPE.PUBLISH:\n\t    \t  // Replace the payload message with a Message object.\n\t    \t  var hex = storedMessage.payloadMessage.payloadHex;\n\t    \t  var buffer = new ArrayBuffer((hex.length)/2);\n              var byteStream = new Uint8Array(buffer); \n              var i = 0;\n              while (hex.length >= 2) { \n            \t  var x = parseInt(hex.substring(0, 2), 16);\n\t              hex = hex.substring(2, hex.length);\n\t              byteStream[i++] = x;\n\t          }\n              var payloadMessage = new Messaging.Message(byteStream);\n\t      \t  \n\t    \t  payloadMessage.qos = storedMessage.payloadMessage.qos;\n\t    \t  payloadMessage.destinationName = storedMessage.payloadMessage.destinationName;\n              if (storedMessage.payloadMessage.duplicate) \n\t    \t\t  payloadMessage.duplicate = true;\n\t    \t  if (storedMessage.payloadMessage.retained) \n\t    \t\t  payloadMessage.retained = true;\t \n\t    \t  wireMessage.payloadMessage = payloadMessage;\n              \n\t          break;    \n\t          \n\t        default:\n\t          throw Error(format(ERROR.INVALID_STORED_DATA, [key, value]));\n\t    }\n    \t    \t\t    \t\n    \tif (key.indexOf(\"Sent:\"+this._localKey) == 0) {      \n    \t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;    \t\t    \n    \t} else if (key.indexOf(\"Received:\"+this._localKey) == 0) {\n    \t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n    \t}\n    };\n    \n    ClientImpl.prototype._process_queue = function () {\n        var message = null;\n        // Process messages in order they were added\n        var fifo = this._msg_queue.reverse();\n\n        // Send all queued messages down socket connection\n        while ((message = fifo.pop())) {\n            this._socket_send(message);\n            // Notify listeners that message was successfully sent\n            if (this._notify_msg_sent[message]) {\n                this._notify_msg_sent[message]();\n                delete this._notify_msg_sent[message];\n            }\n        }\n    };\n\n    /**\n     * @ignore\n     * Expect an ACK response for this message. Add message to the set of in progress\n     * messages and set an unused identifier in this message.\n     */\n    ClientImpl.prototype._requires_ack = function (wireMessage) {\n    \tvar messageCount = Object.keys(this._sentMessages).length;\n        if (messageCount > this.maxMessageIdentifier)\n            throw Error (\"Too many messages:\"+messageCount);\n\n        while(this._sentMessages[this._message_identifier] !== undefined) {\n            this._message_identifier++;\n        }\n        wireMessage.messageIdentifier = this._message_identifier;\n        this._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n        if (wireMessage.type === MESSAGE_TYPE.PUBLISH) {\n        \tthis.store(\"Sent:\", wireMessage);\n        }\n        if (this._message_identifier === this.maxMessagIdentifier) {\n            this._message_identifier = 1;\n        }\n    };\n\n    /** \n     * @ignore\n     * Called when the underlying websocket has been opened.\n     */\n    ClientImpl.prototype._on_socket_open = function () {        \n        // Create the CONNECT message object.\n        var wireMessage = new WireMessage(MESSAGE_TYPE.CONNECT, this.connectOptions); \n        wireMessage.clientId = this.clientId;\n        this._socket_send(wireMessage);\n    };\n\n    /** \n     * @ignore\n     * Called when the underlying websocket has received a complete packet.\n     */\n    ClientImpl.prototype._on_socket_message = function (event) {\n        this._trace(\"Client._on_socket_message\", event.data);\n        \n        // Reset the receive ping timer, we now have evidence the server is alive.\n        this.receivePinger.reset();\n        var byteArray = new Uint8Array(event.data);\n        try {\n            var wireMessage = decodeMessage(byteArray);\n        } catch (error) {\n        \tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message]));\n        \treturn;\n        }\n        this._trace(\"Client._on_socket_message\", wireMessage);\n\n        switch(wireMessage.type) {\n            case MESSAGE_TYPE.CONNACK:\n            \tthis._connectTimeout.cancel();\n            \t\n            \t// If we have started using clean session then clear up the local state.\n            \tif (this.connectOptions.cleanSession) {\n    \t\t    \tfor (key in this._sentMessages) {\t    \t\t\n    \t\t    \t    var sentMessage = this._sentMessages[key];\n    \t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+sentMessage.messageIdentifier);\n    \t\t    \t}\n    \t\t\t\tthis._sentMessages = {};\n\n    \t\t\t\tfor (key in this._receivedMessages) {\n    \t\t\t\t\tvar receivedMessage = this._receivedMessages[key];\n    \t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+receivedMessage.messageIdentifier);\n    \t\t\t\t}\n    \t\t\t\tthis._receivedMessages = {};\n            \t}\n            \t// Client connected and ready for business.\n            \tif (wireMessage.returnCode === 0) {\n        \t        this.connected = true;\n        \t        // Jump to the end of the list of hosts and stop looking for a good host.\n        \t        if (this.connectOptions.hosts)\n        \t            this.hostIndex = this.connectOptions.hosts.length;\n                } else {\n                    this._disconnected(ERROR.CONNACK_RETURNCODE.code , format(ERROR.CONNACK_RETURNCODE, [wireMessage.returnCode, CONNACK_RC[wireMessage.returnCode]]));\n                    break;\n                }\n            \t\n        \t    // Resend messages.\n            \tvar sequencedMessages = new Array();\n            \tfor (var msgId in this._sentMessages) {\n            \t    if (this._sentMessages.hasOwnProperty(msgId))\n            \t        sequencedMessages.push(this._sentMessages[msgId]);\n            \t}\n          \n        \t    // Sort sentMessages into the original sent order.\n            \tvar sequencedMessages = sequencedMessages.sort(function(a,b) {return a.sequence - b.sequence;} );\n        \t    for (var i=0, len=sequencedMessages.length; i<len; i++) {\n        \t    \tvar sentMessage = sequencedMessages[i];\n        \t    \tif (sentMessage.type == MESSAGE_TYPE.PUBLISH && sentMessage.pubRecReceived) {\n        \t    \t    var pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:sentMessage.messageIdentifier});\n        \t            this._schedule_message(pubRelMessage);\n        \t    \t} else {\n        \t    \t\tthis._schedule_message(sentMessage);\n        \t    \t};\n        \t    }\n\n        \t    // Execute the connectOptions.onSuccess callback if there is one.\n        \t    if (this.connectOptions.onSuccess) {\n        \t        this.connectOptions.onSuccess({invocationContext:this.connectOptions.invocationContext});\n        \t    }\n\n        \t    // Process all queued messages now that the connection is established. \n        \t    this._process_queue();\n        \t    break;\n        \n            case MESSAGE_TYPE.PUBLISH:\n                this._receivePublish(wireMessage);\n                break;\n\n            case MESSAGE_TYPE.PUBACK:\n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                 // If this is a re flow of a PUBACK after we have restarted receivedMessage will not exist.\n            \tif (sentMessage) {\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                    localStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n                    if (this.onMessageDelivered)\n                    \tthis.onMessageDelivered(sentMessage.payloadMessage);\n                }\n            \tbreak;\n            \n            case MESSAGE_TYPE.PUBREC:\n                var sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                // If this is a re flow of a PUBREC after we have restarted receivedMessage will not exist.\n                if (sentMessage) {\n                \tsentMessage.pubRecReceived = true;\n                    var pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:wireMessage.messageIdentifier});\n                    this.store(\"Sent:\", sentMessage);\n                    this._schedule_message(pubRelMessage);\n                }\n                break;\n            \t            \t\n            case MESSAGE_TYPE.PUBREL:\n                var receivedMessage = this._receivedMessages[wireMessage.messageIdentifier];\n                localStorage.removeItem(\"Received:\"+this._localKey+wireMessage.messageIdentifier);\n                // If this is a re flow of a PUBREL after we have restarted receivedMessage will not exist.\n                if (receivedMessage) {\n                    this._receiveMessage(receivedMessage);\n                    delete this._receivedMessages[wireMessage.messageIdentifier];\n                }\n                // Always flow PubComp, we may have previously flowed PubComp but the server lost it and restarted.\n                pubCompMessage = new WireMessage(MESSAGE_TYPE.PUBCOMP, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubCompMessage);                    \n                    \n                \n                break;\n\n            case MESSAGE_TYPE.PUBCOMP: \n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n            \tdelete this._sentMessages[wireMessage.messageIdentifier];\n                localStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n                if (this.onMessageDelivered)\n                \tthis.onMessageDelivered(sentMessage.payloadMessage);\n                break;\n                \n            case MESSAGE_TYPE.SUBACK:\n                var sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                if (sentMessage) {\n                \tif(sentMessage.timeOut)\n                \t    sentMessage.timeOut.cancel();\n                    if (sentMessage.callback) {\n                        sentMessage.callback();\n                    }\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                }\n                break;\n        \t    \n            case MESSAGE_TYPE.UNSUBACK:\n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                if (sentMessage) { \n                \tif (sentMessage.timeOut)\n                        sentMessage.timeOut.cancel();\n                    if (sentMessage.callback) {\n                        sentMessage.callback();\n                    }\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                }\n\n                break;\n                \n            case MESSAGE_TYPE.PINGRESP:\n            \t/* The sendPinger or receivePinger may have sent a ping, the receivePinger has already been reset. */\n            \tthis.sendPinger.reset();\n            \tbreak;\n            \t\n            case MESSAGE_TYPE.DISCONNECT:\n            \t// Clients do not expect to receive disconnect packets.\n            \tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n            \tbreak;\n\n            default:\n            \tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n        }; \n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._on_socket_error = function (error) {\n    \tthis._disconnected(ERROR.SOCKET_ERROR.code , format(ERROR.SOCKET_ERROR, [error.data]));\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._on_socket_close = function () {\n        this._disconnected(ERROR.SOCKET_CLOSE.code , format(ERROR.SOCKET_CLOSE));\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._socket_send = function (wireMessage) {\n    \tif (wireMessage.type == 1) {\n    \t\tvar wireMessageMasked = this._traceMask(wireMessage, \"password\"); \n    \t\tthis._trace(\"Client._socket_send\", wireMessageMasked);\n    \t}\n    \telse this._trace(\"Client._socket_send\", wireMessage);\n        \n        this.socket.send(wireMessage.encode());\n        /* We have proved to the server we are alive. */\n        this.sendPinger.reset();\n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._receivePublish = function (wireMessage) {\n        switch(wireMessage.payloadMessage.qos) {\n            case \"undefined\":\n            case 0:\n                this._receiveMessage(wireMessage);\n                break;\n\n            case 1:\n                var pubAckMessage = new WireMessage(MESSAGE_TYPE.PUBACK, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubAckMessage);\n                this._receiveMessage(wireMessage);\n                break;\n\n            case 2:\n                this._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n                this.store(\"Received:\", wireMessage);\n                var pubRecMessage = new WireMessage(MESSAGE_TYPE.PUBREC, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubRecMessage);\n\n                break;\n\n            default:\n                throw Error(\"Invaild qos=\"+wireMmessage.payloadMessage.qos);\n        };\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._receiveMessage = function (wireMessage) {\n        if (this.onMessageArrived) {\n            this.onMessageArrived(wireMessage.payloadMessage);\n        }\n    };\n\n    /**\n     * @ignore\n     * Client has disconnected either at its own request or because the server\n     * or network disconnected it. Remove all non-durable state.\n     * @param {errorCode} [number] the error number.\n     * @param {errorText} [string] the error text.\n     */\n    ClientImpl.prototype._disconnected = function (errorCode, errorText) {\n    \tthis._trace(\"Client._disconnected\", errorCode, errorText);\n    \t\n    \tthis.sendPinger.cancel();\n    \tthis.receivePinger.cancel();\n    \tif (this._connectTimeout)\n    \t    this._connectTimeout.cancel();\n    \t// Clear message buffers.\n        this._msg_queue = [];\n        this._notify_msg_sent = {};\n       \n        if (this.socket) {\n            // Cancel all socket callbacks so that they cannot be driven again by this socket.\n            this.socket.onopen = null;\n            this.socket.onmessage = null;\n            this.socket.onerror = null;\n            this.socket.onclose = null;\n            if (this.socket.readyState === 1)\n                this.socket.close();\n            delete this.socket;           \n        }\n        \n        if (this.connectOptions.hosts && this.hostIndex < this.connectOptions.hosts.length-1) {\n        \t// Try the next host.\n        \tthis.hostIndex++;\n        \tthis._doConnect(this.connectOptions.hosts[this.hostIndex], this.connectOptions.ports[this.hostIndex]);\n        \n        } else {\n        \n            if (errorCode === undefined) {\n        \t    errorCode = ERROR.OK.code;\n        \t    errorText = format(ERROR.OK);\n            }\n        \t\n            // Run any application callbacks last as they may attempt to reconnect and hence create a new socket.\n            if (this.connected) {\n                this.connected = false;\n                // Execute the connectionLostCallback if there is one, and we were connected.       \n                if (this.onConnectionLost)\n            \t    this.onConnectionLost({errorCode:errorCode, errorMessage:errorText});      \t\n            } else {\n        \t    // Otherwise we never had a connection, so indicate that the connect has failed.\n                if(this.connectOptions.onFailure)\n            \t    this.connectOptions.onFailure({invocationContext:this.connectOptions.invocationContext, errorCode:errorCode, errorMessage:errorText});\n            }\n        }\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._trace = function () {\n        if ( this._traceBuffer !== null ) {  \n            for (var i = 0, max = arguments.length; i < max; i++) {\n                if ( this._traceBuffer.length == this._MAX_TRACE_ENTRIES ) {    \n                    this._traceBuffer.shift();              \n                }\n                if (i === 0) this._traceBuffer.push(arguments[i]);\n                else if (typeof arguments[i] === \"undefined\" ) this._traceBuffer.push(arguments[i]);\n                else this._traceBuffer.push(\"  \"+JSON.stringify(arguments[i]));\n           };\n        };\n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._traceMask = function (traceObject, masked) {\n        var traceObjectMasked = {};\n\t    for (var attr in traceObject) {\n\t        if (traceObject.hasOwnProperty(attr)) {\n\t        \tif (attr == masked) \n\t        \t\ttraceObjectMasked[attr] = \"******\";\n\t        \telse\n\t        \t\ttraceObjectMasked[attr] = traceObject[attr];\n\t        } \n\t    }\n\t    return traceObjectMasked;\n    };\n\n    // ------------------------------------------------------------------------\n    // Public Programming interface.\n    // ------------------------------------------------------------------------\n    \n    /** \n     * The JavaScript application communicates to the server using a Messaging.Client object. \n     * <p>\n     * Other programming languages,\n     * <a href=\"/clients/java/doc/javadoc/com/ibm/micro/client/mqttv3/MqttClient.html\"><big>Java</big></a>,\n     * <a href=\"/clients/c/doc/html/index.html\"><big>C</big></a>.\n     * <p>\n     * Most applications will create just one Client object and then call its connect() method,\n     * however applications can create more than one Client object if they wish. \n     * In this case the combination of host, port and clientId attributes must be different for each Client object.\n     * <p>\n     * The send, subscribe and unsubscribe methods are implemented as asynchronous JavaScript methods \n     * (even though the underlying protocol exchange might be synchronous in nature). \n     * This means they signal their completion by calling back to the application, \n     * via Success or Failure callback functions provided by the application on the method in question. \n     * Such callbacks are called at most once per method invocation and do not persist beyond the lifetime \n     * of the script that made the invocation.\n     * <p>\n     * In contrast there are some callback functions <i> most notably onMessageArrived</i> \n     * that are defined on the Messaging.Client object.  \n     * These may get called multiple times, and aren't directly related to specific method invocations made by the client. \n     *\n     * @name Messaging.Client    \n     * \n     * @constructor\n     * Creates a Messaging.Client object that can be used to communicate with a Messaging server.\n     *  \n     * @param {string} host the address of the messaging server, as a DNS name or dotted decimal IP address.\n     * @param {number} port the port number in the host to connect to.\n     * @param {string} clientId the Messaging client identifier, between 1 and 23 characters in length.\n     * \n     * @property {string} host <i>read only</i> the server's DNS hostname or dotted decimal IP address.\n     * @property {number} port <i>read only</i> the server's port.\n     * @property {string} clientId <i>read only</i> used when connecting to the server.\n     * @property {function} onConnectionLost called when a connection has been lost, \n     * after a connect() method has succeeded.\n     * Establish the call back used when a connection has been lost. The connection may be\n     * lost because the client initiates a disconnect or because the server or network \n     * cause the client to be disconnected. The disconnect call back may be called without \n     * the connectionComplete call back being invoked if, for example the client fails to \n     * connect.\n     * A single response object parameter is passed to the onConnectionLost callback containing the following fields:\n     * <ol>   \n     * <li>errorCode\n     * <li>errorMessage       \n     * </ol>\n     * @property {function} onMessageDelivered called when a message has been delivered. \n     * All processing that this Client will ever do has been completed. So, for example,\n     * in the case of a Qos=2 message sent by this client, the PubComp flow has been received from the server\n     * and the message has been removed from persistent storage before this callback is invoked. \n     * Parameters passed to the onMessageDelivered callback are:\n     * <ol>   \n     * <li>Messaging.Message that was delivered.\n     * </ol>    \n     * @property {function} onMessageArrived called when a message has arrived in this Messaging.client. \n     * Parameters passed to the onMessageArrived callback are:\n     * <ol>   \n     * <li>Messaging.Message that has arrived.\n     * </ol>    \n     */\n    var Client = function (host, port, clientId) {\n    \tif (typeof host !== \"string\")\n        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof host, \"host\"]));\n    \tif (typeof port !== \"number\" || port < 0)\n        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof port, \"port\"]));\n    \t\n    \tvar clientIdLength = 0;\n    \tfor (var i = 0; i<clientId.length; i++) {\n    \t\tvar charCode = clientId.charCodeAt(i);                   \n    \t\tif (0xD800 <= charCode && charCode <= 0xDBFF)  {    \t\t\t\n                 i++; // Surrogate pair.\n            }   \t\t   \n    \t\tclientIdLength++;\n    \t}     \t   \t\n        if (typeof clientId !== \"string\" || clientIdLength < 1 | clientIdLength > 23)\n        \tthrow new Error(format(ERROR.INVALID_ARGUMENT, [clientId, \"clientId\"])); \n    \t\n        var client = new ClientImpl(host, port, clientId);\n        this._getHost =  function() { return client.host; };\n    \tthis._setHost = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n         \t\n        this._getPort = function() { return client.port; };\n    \tthis._setPort = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n    \t\n    \tthis._getClientId = function() { return client.clientId; };\n    \tthis._setClientId = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n        \n        this._getOnConnectionLost = function() { return client.onConnectionLost; };\n        this._setOnConnectionLost = function(newOnConnectionLost) { \n            if (typeof newOnConnectionLost === \"function\")\n            \tclient.onConnectionLost = newOnConnectionLost;\n            else \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnectionLost, \"onConnectionLost\"]));\n        };\n\n        this._getOnMessageDelivered = function() { return client.onMessageDelivered; };\n    \tthis._setOnMessageDelivered = function(newOnMessageDelivered) { \n    \t\tif (typeof newOnMessageDelivered === \"function\")\n    \t\t\tclient.onMessageDelivered = newOnMessageDelivered;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageDelivered, \"onMessageDelivered\"]));\n    \t};\n       \n        this._getOnMessageArrived = function() { return client.onMessageArrived; };\n    \tthis._setOnMessageArrived = function(newOnMessageArrived) { \n    \t\tif (typeof newOnMessageArrived === \"function\")\n    \t\t\tclient.onMessageArrived = newOnMessageArrived;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageArrived, \"onMessageArrived\"]));\n    \t};\n        \n        /** \n         * Connect this Messaging client to its server. \n         * \n         * @name Messaging.Client#connect\n         * @function\n         * @param {Object} [connectOptions] attributes used with the connection. \n         * <p>\n         * Properties of the connect options are: \n         * @config {number} [timeout] If the connect has not succeeded within this number of seconds, it is deemed to have failed.\n         *                            The default is 30 seconds.\n         * @config {string} [userName] Authentication username for this connection.\n         * @config {string} [password] Authentication password for this connection.\n         * @config {Messaging.Message} [willMessage] sent by the server when the client disconnects abnormally.\n         * @config {Number} [keepAliveInterval] the server disconnects this client if there is no activity for this\n         *                number of seconds. The default value of 60 seconds is assumed if not set.\n         * @config {boolean} [cleanSession] if true(default) the client and server persistent state is deleted on successful connect.\n         * @config {boolean} [useSSL] if present and true, use an SSL Websocket connection.\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the connect acknowledgement has been received from the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext as passed in to the onSuccess method in the connectOptions.       \n         * </ol>\n         * @config {function} [onFailure] called when the connect request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext as passed in to the onFailure method in the connectOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {Array} [hosts] If present this set of hostnames is tried in order in place \n         * of the host and port paramater on the construtor. The hosts and the matching ports are tried one at at time in order until\n         * one of then succeeds.\n         * @config {Array} [ports] If present this set of ports matching the hosts.\n         * @throws {InvalidState} if the client is not in disconnected state. The client must have received connectionLost\n         * or disconnected before calling connect for a second or subsequent time.\n         */\n        this.connect = function (connectOptions) {\n        \tconnectOptions = connectOptions || {} ;\n        \tvalidate(connectOptions,  {timeout:\"number\",\n        \t\t\t                   userName:\"string\", \n        \t\t                       password:\"string\", \n        \t\t                       willMessage:\"object\", \n        \t\t                       keepAliveInterval:\"number\", \n        \t\t                       cleanSession:\"boolean\", \n        \t\t                       useSSL:\"boolean\",\n        \t\t                       invocationContext:\"object\", \n      \t\t                           onSuccess:\"function\", \n      \t\t                           onFailure:\"function\",\n      \t\t                           hosts:\"object\",\n      \t\t                           ports:\"object\"});\n        \t\n        \t// If no keep alive interval is set, assume 60 seconds.\n            if (connectOptions.keepAliveInterval === undefined)\n            \tconnectOptions.keepAliveInterval = 60;\n\n        \tif (connectOptions.willMessage) {\n                if (!(connectOptions.willMessage instanceof Message))\n            \t    throw new Error(format(ERROR.INVALID_TYPE, [connectOptions.willMessage, \"connectOptions.willMessage\"]));\n                // The will message must have a payload that can be represented as a string.\n                // Cause the willMessage to throw an exception if this is not the case.\n            \tconnectOptions.willMessage.stringPayload;\n            \t\n            \tif (typeof connectOptions.willMessage.destinationName === \"undefined\")\n                \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.willMessage.destinationName, \"connectOptions.willMessage.destinationName\"]));\n        \t}\n        \tif (typeof connectOptions.cleanSession === \"undefined\")\n        \t\tconnectOptions.cleanSession = true;\n        \tif (connectOptions.hosts) {\n        \t\tif (!connectOptions.ports)\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tif (!(connectOptions.hosts instanceof Array) )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n        \t\tif (!(connectOptions.ports instanceof Array) )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tif (connectOptions.hosts.length <1 )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n        \t\tif (connectOptions.hosts.length != connectOptions.ports.length)\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tfor (var i = 0; i<connectOptions.hosts.length; i++) {\n        \t\t\tif (typeof connectOptions.hosts[i] !== \"string\")\n        \t        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.hosts[i], \"connectOptions.hosts[\"+i+\"]\"]));\n        \t\t\tif (typeof connectOptions.ports[i] !== \"number\" || connectOptions.ports[i] < 0)\n        \t        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.ports[i], \"connectOptions.ports[\"+i+\"]\"]));\n        \t    }\n        \t}\n\n        \tclient.connect(connectOptions);\n        };\n     \n        /** \n         * Subscribe for messages, request receipt of a copy of messages sent to the destinations described by the filter.\n         * \n         * @name Messaging.Client#subscribe\n         * @function\n         * @param {string} filter describing the destinations to receive messages from.\n         * <br>\n         * @param {object} [subscribeOptions] used to control the subscription, as follows:\n         * <p>\n         * @config {number} [qos] the maiximum qos of any publications sent as a result of making this subscription.\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the subscribe acknowledgement has been received from the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the subscribeOptions.       \n         * </ol>\n         * @config {function} [onFailure] called when the subscribe request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the subscribeOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {number} [timeout] which if present determines the number of seconds after which the onFailure calback is called\n         * the presence of a timeout does not prevent the onSuccess callback from being called when the MQTT Suback is eventually received.         \n    \t * @throws {InvalidState} if the client is not in connected state.\n         */\n        this.subscribe = function (filter, subscribeOptions) {\n        \tif (typeof filter !== \"string\")\n        \t\tthrow new Error(\"Invalid argument:\"+filter);\n        \tsubscribeOptions = subscribeOptions || {} ;\n        \tvalidate(subscribeOptions,  {qos:\"number\", \n        \t\t                         invocationContext:\"object\", \n        \t\t                         onSuccess:\"function\", \n        \t\t                         onFailure:\"function\",\n        \t\t                         timeout:\"number\"\n        \t\t                        });\n        \tif (subscribeOptions.timeout && !subscribeOptions.onFailure)\n        \t\tthrow new Error(\"subscribeOptions.timeout specified with no onFailure callback.\");\n        \tif (typeof subscribeOptions.qos !== \"undefined\" \n        \t\t&& !(subscribeOptions.qos === 0 || subscribeOptions.qos === 1 || subscribeOptions.qos === 2 ))\n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [subscribeOptions.qos, \"subscribeOptions.qos\"]));\n            client.subscribe(filter, subscribeOptions);\n        };\n\n        /**\n         * Unsubscribe for messages, stop receiving messages sent to destinations described by the filter.\n         * \n         * @name Messaging.Client#unsubscribe\n         * @function\n         * @param {string} filter describing the destinations to receive messages from.\n         * @param {object} [unsubscribeOptions] used to control the subscription, as follows:\n         * <p>\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the unsubscribe acknowledgement has been receive dfrom the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the unsubscribeOptions.     \n         * </ol>\n         * @config {function} [onFailure] called when the unsubscribe request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the unsubscribeOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {number} [timeout] which if present determines the number of seconds after which the onFailure callback is called, the\n         * presence of a timeout does not prevent the onSuccess callback from being called when the MQTT UnSuback is eventually received.\n         * @throws {InvalidState} if the client is not in connected state.\n         */\n        this.unsubscribe = function (filter, unsubscribeOptions) {\n        \tif (typeof filter !== \"string\")\n        \t\tthrow new Error(\"Invalid argument:\"+filter);\n        \tunsubscribeOptions = unsubscribeOptions || {} ;\n        \tvalidate(unsubscribeOptions,  {invocationContext:\"object\", \n        \t\t                           onSuccess:\"function\", \n        \t\t                           onFailure:\"function\",\n        \t\t                           timeout:\"number\"\n        \t\t                          });\n        \tif (unsubscribeOptions.timeout && !unsubscribeOptions.onFailure)\n        \t\tthrow new Error(\"unsubscribeOptions.timeout specified with no onFailure callback.\");\n            client.unsubscribe(filter, unsubscribeOptions);\n        };\n\n        /**\n         * Send a message to the consumers of the destination in the Message.\n         * \n         * @name Messaging.Client#send\n         * @function \n         * @param {Messaging.Message} message to send.\n         \n         * @throws {InvalidState} if the client is not in connected state.\n         */   \n        this.send = function (message) {       \t\n            if (!(message instanceof Message))\n                throw new Error(\"Invalid argument:\"+typeof message);\n            if (typeof message.destinationName === \"undefined\")\n            \tthrow new Error(\"Invalid parameter Message.destinationName:\"+message.destinationName);\n           \n            client.send(message);   \n        };\n        \n        /** \n         * Normal disconnect of this Messaging client from its server.\n         * \n         * @name Messaging.Client#disconnect\n         * @function\n         * @throws {InvalidState} if the client is not in connected or connecting state.     \n         */\n        this.disconnect = function () {\n        \tclient.disconnect();\n        };\n        \n        /** \n         * Get the contents of the trace log.\n         * \n         * @name Messaging.Client#getTraceLog\n         * @function\n         * @return {Object[]} tracebuffer containing the time ordered trace records.\n         */\n        this.getTraceLog = function () {\n        \treturn client.getTraceLog();\n        }\n        \n        /** \n         * Start tracing.\n         * \n         * @name Messaging.Client#startTrace\n         * @function\n         */\n        this.startTrace = function () {\n        \tclient.startTrace();\n        };\n        \n        /** \n         * Stop tracing.\n         * \n         * @name Messaging.Client#stopTrace\n         * @function\n         */\n        this.stopTrace = function () {\n            client.stopTrace();\n        };\n    };\n\n    Client.prototype = {\n        get host() { return this._getHost(); },\n        set host(newHost) { this._setHost(newHost); },\n        \t\n        get port() { return this._getPort(); },\n        set port(newPort) { this._setPort(newPort); },\n        \t\n        get clientId() { return this._getClientId(); },\n        set clientId(newClientId) { this._setClientId(newClientId); },\n\n        get onConnectionLost() { return this._getOnConnectionLost(); },\n        set onConnectionLost(newOnConnectionLost) { this._setOnConnectionLost(newOnConnectionLost); },\n\n        get onMessageDelivered() { return this._getOnMessageDelivered(); },\n        set onMessageDelivered(newOnMessageDelivered) { this._setOnMessageDelivered(newOnMessageDelivered); },\n        \n        get onMessageArrived() { return this._getOnMessageArrived(); },\n        set onMessageArrived(newOnMessageArrived) { this._setOnMessageArrived(newOnMessageArrived); }\n    };\n    \n    /** \n     * An application message, sent or received.\n     * <p>\n     * Other programming languages,\n     * <a href=\"/clients/java/doc/javadoc/com/ibm/micro/client/mqttv3/MqttMessage.html\"><big>Java</big></a>,\n     * <a href=\"/clients/c/doc/html/struct_m_q_t_t_client__message.html\"><big>C</big></a>.\n     * <p>\n     * All attributes may be null, which implies the default values.\n     * \n     * @name Messaging.Message\n     * @constructor\n     * @param {String|ArrayBuffer} payload The message data to be sent.\n     * <p>\n     * @property {string} payloadString <i>read only</i> The payload as a string if the payload consists of valid UTF-8 characters.\n     * @property {ArrayBuffer} payloadBytes <i>read only</i> The payload as an ArrayBuffer.\n     * <p>\n     * @property {string} destinationName <b>mandatory</b> The name of the destination to which the message is to be sent\n     *                    (for messages about to be sent) or the name of the destination from which the message has been received.\n     *                    (for messages received by the onMessage function).\n     * <p>\n     * @property {number} qos The Quality of Service used to deliver the message.\n     * <dl>\n     *     <dt>0 Best effort (default).\n     *     <dt>1 At least once.\n     *     <dt>2 Exactly once.     \n     * </dl>\n     * <p>\n     * @property {Boolean} retained If true, the message is to be retained by the server and delivered \n   \t *                     to both current and future subscriptions.\n   \t *                     If false the server only delivers the message to current subscribers, this is the default for new Messages. \n   \t *                     A received message has the retained boolean set to true if the message was published \n   \t *                     with the retained boolean set to true\n   \t *                     and the subscrption was made after the message has been published. \n   \t * <p>\n     * @property {Boolean} duplicate <i>read only</i> If true, this message might be a duplicate of one which has already been received. \n     *                     This is only set on messages received from the server.\n     *                     \n     */\n    var Message = function (newPayload) {  \n    \tvar payload;\n    \tif (   typeof newPayload === \"string\" \n    \t\t|| newPayload instanceof ArrayBuffer\n    \t\t|| newPayload instanceof Int8Array\n    \t\t|| newPayload instanceof Uint8Array\n    \t\t|| newPayload instanceof Int16Array\n    \t\t|| newPayload instanceof Uint16Array\n    \t\t|| newPayload instanceof Int32Array\n    \t\t|| newPayload instanceof Uint32Array\n    \t\t|| newPayload instanceof Float32Array\n    \t\t|| newPayload instanceof Float64Array\n    \t   ) {\n            payload = newPayload;\n        } else {\n            throw (format(ERROR.INVALID_ARGUMENT, [newPayload, \"newPayload\"]));\n        }\n\n    \tthis._getPayloadString = function () {\n    \t\tif (typeof payload === \"string\")\n       \t\t\treturn payload;\n       \t\telse\n       \t\t\treturn parseUTF8(payload, 0, payload.length); \n    \t};\n\n    \tthis._getPayloadBytes = function() {\n    \t\tif (typeof payload === \"string\") {\n    \t\t\tvar buffer = new ArrayBuffer(UTF8Length(payload));\n    \t\t\tvar byteStream = new Uint8Array(buffer); \n    \t\t\tstringToUTF8(payload, byteStream, 0);\n\n    \t\t\treturn byteStream;\n    \t\t} else {\n    \t\t\treturn payload;\n    \t\t};\n    \t};\n\n    \tvar destinationName = undefined;\n    \tthis._getDestinationName = function() { return destinationName; };\n    \tthis._setDestinationName = function(newDestinationName) { \n    \t\tif (typeof newDestinationName === \"string\")\n    \t\t    destinationName = newDestinationName;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newDestinationName, \"newDestinationName\"]));\n    \t};\n    \t    \t\n    \tvar qos = 0;\n    \tthis._getQos = function() { return qos; };\n    \tthis._setQos = function(newQos) { \n    \t\tif (newQos === 0 || newQos === 1 || newQos === 2 )\n    \t\t\tqos = newQos;\n    \t\telse \n    \t\t\tthrow new Error(\"Invalid argument:\"+newQos);\n    \t};\n\n    \tvar retained = false;\n    \tthis._getRetained = function() { return retained; };\n    \tthis._setRetained = function(newRetained) { \n    \t\tif (typeof newRetained === \"boolean\")\n    \t\t    retained = newRetained;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newRetained, \"newRetained\"]));\n    \t};\n    \t\n    \tvar duplicate = false;\n    \tthis._getDuplicate = function() { return duplicate; };\n    \tthis._setDuplicate = function(newDuplicate) { duplicate = newDuplicate; };\n    };\n    \n    Message.prototype = {\n    \tget payloadString() { return this._getPayloadString(); },\n    \tget payloadBytes() { return this._getPayloadBytes(); },\n    \t\n    \tget destinationName() { return this._getDestinationName(); },\n    \tset destinationName(newDestinationName) { this._setDestinationName(newDestinationName); },\n    \t\n    \tget qos() { return this._getQos(); },\n    \tset qos(newQos) { this._setQos(newQos); },\n\n    \tget retained() { return this._getRetained(); },\n    \tset retained(newRetained) { this._setRetained(newRetained); },\n\n    \tget duplicate() { return this._getDuplicate(); },\n    \tset duplicate(newDuplicate) { this._setDuplicate(newDuplicate); }\n    };\n       \n    // Module contents.\n    return {\n        Client: Client,\n        Message: Message\n    };\n})(window);"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/order.js",
    "content": "/**\n * Created by 文辉 on 2017/7/25.\n */\n$(document).ready(function () {\n    $(\"#confirm-orders\").click(function () {\n        // alert(\"safd\");\n        var selectAddr =  $('input:radio[name=\"addressid\"]:checked').val();\n        if(selectAddr == null) {\n            swal(\"请先添加地址\");\n            return;\n        }\n        var isPay = $('#pay-select').val();\n        var oldPrice = $('#total-old').text();\n        var newPrice = $('#total-new').text();\n        $.ajax({\n            url: \"/shop/orderFinish\",\n            type: \"POST\",\n            data: {\n                oldPrice: oldPrice,\n                newPrice: newPrice,\n                isPay: isPay,\n                addressid: selectAddr\n            },\n            success: function () {\n                swal(\"购买成功\", \"\", \"success\");\n                location.href = \"/shop/info/list\"\n            },\n            error: function () {\n                swal(\"购买失败，无法连接到服务器！\");\n            }\n        });\n    });\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/send.js",
    "content": "var client;\nvar clientID;\n$(window).on('beforeunload', function () {\n    client = null;\n    window.opener.document.getElementById(\"flag\").value = \"0\";\n});\n$(document).ready(function () {\n\n    console.log(getChatList(2));\n    reGetChatUser($(\"#receiveId\").text());\n\n    clientID = $('#sendId').text();\n    client = new Messaging.Client('127.0.0.1', 61614, clientID);\n    client.onConnectionLost = function () {\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function (message) {\n        clientID = $('#sendId').text();\n        var userid = $(\"#receiveId\").text();\n        var msgObj = jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to === clientID && msgObj.from === userid) {\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n            /*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*/\n        } else if (msgObj.to === clientID && !getChatList(msgObj.from)) {\n            //重新获取聊天列表\n            reGetChatUser(msgObj.from);\n            // reGetChatUser(null);\n           /* var chatlistitem = '<a class=\"a-card\" data-userid=\"' + msgObj.from + '\"> <div class=\"card\">' + msgObj.from + '</div> </a>';\n            $('.a-far').prepend(chatlistitem);*/\n        }\n    };\n    //建立连接和订阅\n    client.connect({\n        onSuccess: function () {\n            //订阅topic\n            client.subscribe(\"topic\");\n            // alert(\"连接成功\");\n        }\n    });\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function () {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID = $('#sendId').text();\n            var msg = {};\n            msg.from = clientID;\n            msg.to = $('#receiveId').text();\n            msg.body = message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function (request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function (data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n            var receive = $(\"#receiveId\").text();\n            /*$.post(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             });\n             receive();\n             refreshList();*/\n            /*$.get(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             },\n             function(data,status){\n             alert(\"数据: \\n\" + data + \"\\n状态: \" + status);\n             });*/\n        }\n    });\n\n    //回车\n    $(document).keypress(function (e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function () {\n        $('.a-card').css(\"background\", \"#FFFFFF\")\n        $(this).css(\"background\", \"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function (request) {\n                alert(\"保存消息失败\");\n            },\n            success: function (result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n    /*function hitList(){\n     $('.list-item').css(\"background\",\"#FAFAFA\");\n     $(this).css(\"background\",\"#EBEBEC\");\n     var name = $(this).children(\"#user-name\").text();\n     var number = $(this).children(\"#user-no\").text();\n     $(\"#receive\").text(name);\n     $(\"#receiveId\").text(number);\n\n     }*/\n\n    $('.chat-list').hover(function () {\n        $(this).css(\"overflow-y\", \"auto\");\n    }, function () {\n        $(this).css(\"overflow-y\", \"hidden\");\n    });\n    //refreshList();\n\n});\n\nfunction userListClick() {\n\n    //发异步请求查聊天消息\n    $.ajax({\n        url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            senduser: $(\"#sendId\").text(),\n            receiveuser: $(\"#receiveId\").text(),\n        },\n        error: function (request) {\n            alert(\"保存消息失败\");\n        },\n        success: function (result) {\n            $('.chat-content-body').empty();\n            showMessage(result.info.message);\n            // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n        }\n    });\n}\n\n/*function receive(){\n var sendUser = $('#receiveId').text();\n $.post(\"servlet/ReceiveServlet\", {\n sendId: sendUser,\n },\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n $(\".chat-content-body\").html('');\n for (var i = 0; i < data.length; i++) {\n showMessage(data[i].User1,data[i].MsgContent);\n }\n },\"json\");\n }*/\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index, item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n//获取所有聊天列表\nfunction getChatList(id) {\n    var chatList = [];\n    $('.a-far>a').each(function () {\n        chatList.push($(this).attr(\"data-userid\"));\n    });\n    console.log(chatList);\n    for (var i = 0; i < chatList.length; i++) {\n        if (chatList[i] == id) {\n            return true;\n        }\n    }\n    return false;\n\n    /*$('.a-far').children().each(function(index,item){\n     alert(item.attr(\"data-userid\"));\n     })*/\n\n}\n\n//重新获取列表\nfunction reGetChatUser(sendto) {\n    $.ajax({\n        url: \"/shop/chatto/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            sendto: sendto\n        },\n        error: function (request) {\n            alert(result.msg);\n        },\n        success: function (result) {\n            $('.a-far').empty();\n            showChatList(result.info.userlist);\n        }\n    });\n}\n\nfunction showChatList(userlist) {\n    $.each(userlist, function (index, item) {\n        var chatlistitemA = $(\"<a></a>\").addClass(\"a-card\").attr(\"data-userid\", item.userid).attr(\"data-username\", item.username);\n        var chatlistitem = chatlistitemA.addClass(\"card\").append(item.username);\n        chatlistitemA.click(function () {\n            $('.a-card').css(\"background\", \"#FFFFFF\")\n            $(this).css(\"background\", \"#F8F8F8\");\n            var userid = $(this).attr(\"data-userid\");\n            // var username = $(this).children(\".card\").text();\n            var username = $(this).attr(\"data-username\");\n            $(\"#receive\").text(username);\n            $(\"#receiveId\").text(userid);\n            userListClick();\n        });\n\n        /* <div class=\"card\">' + item.username + '</div>\n        *!/*/\n        $('.a-far').prepend(chatlistitem);\n    });\n}\n\n\n/*\n function refreshList() {\n $.post(\"servlet/RefreshServlet\",\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n //$(\".chat-list\").html('');\n for (var i = 0; i < data.length; i++) {\n // showList(data[i].UserId,data[i].Name);\n $('#list-item'+i).children(\"#user-name\").text(data[i].Name);\n $('#list-item'+i).children(\"#user-no\").text(data[i].UserId);\n $('#list-item'+i).css(\"display\",\"block\");\n }\n },\"json\");\n }\n\n function showList(id,name) {\n var item = '<div class=\"list-item\"><h3 id=\"user-name\">'+name+'</h3><span id=\"user-no\">'+id+'</span></div>';\n $('.chat-list').append(item);\n }*/\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/shopcart.js",
    "content": "/*\n$(document).ready(function(){\n\t$('.delete-goods').click(function(){\n\t\tvar goodsid = $(this).attr(\"data-goodsid\");\n        alert(\"asfd\");\n\t\t// deleteGoods(goodsid);\n\t});\n\n\t$('.confirm-orders').click(function(){\n\t\tconfirmOrders();\n\t\talert(\"已成功加入订单，并已发送邮件至卖家，请等待卖家回复！\");\n\t\tlocation.href = \"/index.jsp\";\n\t});\n});*/\n/*\nfunction deleteGoods(goodsid){\n\t$.post(\"servlet/DeleteCartServlet\", { \n\t\tgoodsId: goodsid,\n\t});\n}\n\nfunction confirmOrders(){\n\t$.post(\"servlet/SaleServlet\");\n}*/\n$(document).ready(function () {\n    var path = $(\"#path\").text();\n    showcart();\n\n    /*$('.delete-goods').click(function(){\n        alert(\"adf\");\n        var goodsid = $(this).attr(\"data-goodsid\");\n        $.ajax({\n            url: \"/shop/deleteCart\" + goodsid,\n            type: \"DELETE\",\n            success:function (result) {\n                swal(result.msg, \"\",\"success\");\n                showcart();\n            },\n            error:function () {\n                /!*to_page('/shop',currentPage);*!/\n                swal(\"删除失败\");\n            }\n        })\n    });*/\n});\n\n/*$(document).on(\"click\",\".delete-good\",function () {\n    alert(\"afd\");\n});*/\n\nfunction deleteCartGoods(goodsid) {\n    $.ajax({\n        url: \"/shop/deleteCart/\" + goodsid,\n        type: \"DELETE\",\n        success: function (result) {\n            // swal(result.msg, \"\",\"success\");\n            showcart();\n        },\n        error:function () {\n            swal(\"删除失败\");\n        }\n    })\n}\n\n//改变商品数量更新购物车\nfunction updateCart(goodsid, newNum) {\n    //获取当前数量\n    // var newNum = $(\".num\").val();\n    $.ajax({\n        url: \"/shop/update\",\n        data: {\n            goodsid: goodsid,\n            num:newNum\n        },\n        method: \"post\",\n        success: function (result) {\n            // swal(result.msg, \"\", \"success\");\n            showcart();\n        },\n        error: function (result) {\n            swal(\"更新购物车失败\");\n        }\n    });\n}\n\nfunction showcart() {\n    $.ajax({\n        url: \"/shop\" + \"/cartjson\",\n        type: \"post\",\n        success: function (result) {\n            //显示购物车\n            build_cart_table(result);\n        },\n        error: function (result) {\n            swal(\"获取购物车失败\");\n        }\n    });\n}\n\nfunction build_cart_table(result) {\n    $(\"#cart-table tbody\").empty();\n    var goods = result.info.shopcart;\n    var totalnum = 0;\n    var totalMoney = 0;\n\n    if(goods.length === 0) {\n        var spareTd = $('<tr> <td colspan=\"6\"> <div class=\"coupon\" style=\"margin-left:37%;\">购物车还是空的，快去<a href=\"/shop/main\" style=\"color:red;\">首页</a>看看吧！ </div> </td> </tr>');\n        spareTd.appendTo(\"#cart-table tbody\");\n    } else {\n        $.each(goods, function (index,item) {\n\n            var delA = $(\"<a></a>\").addClass(\"delete-goods\").attr(\"data-goodsid\",item.goodsid).append(\"×\");\n\n            var deleteCart = $(\"<td></td>\").addClass(\"product-remove product-remove_2\")\n                .append(delA);\n\n            delA.click(function () {\n                deleteCartGoods(item.goodsid);\n            });\n\n            var shopimage = $(\"<td></td>\").addClass(\"product-thumbnail product-thumbnail-2\")\n                .append($(\"<a></a>\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid)\n                    .append($(\"<img/>\").attr(\"src\",\"/pictures/\"+item.imagePaths[0].path)));\n\n            var goodsname = $(\"<td></td>\").addClass(\"product-name product-name_2\")\n                .append($(\"<a></a>\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid).append(item.goodsname));\n\n            var goodsprice = $(\"<td></td>\").addClass(\"product-price\")\n                .append($(\"<span></span>\").addClass(\"amount-list amount-list-2\").append(\"￥\"+item.price));\n\n            var numIput = $(\"<input/>\").addClass(\"num\").attr(\"type\",\"number\").attr(\"value\",item.num);\n\n            var num = $(\"<td></td>\").addClass(\"product-stock-status\")\n                .append($(\"<div></div>\").addClass(\"latest_es_from_2\")\n                    .append(numIput));\n\n            numIput.change(function () {\n               updateCart(item.goodsid,$(this).val());\n            });\n\n            var totalPrice = $(\"<td></td>\").addClass(\"product-price\")\n                .append($(\"<span></span>\").addClass(\"amount-list amount-list-2\").append(\"￥\"+item.price*item.num));\n\n            var goodsitem = $(\"<tr></tr>\").append(deleteCart)\n                .append(shopimage)\n                .append(goodsname)\n                .append(goodsprice)\n                .append(num)\n                .append(totalPrice)\n                .appendTo(\"#cart-table tbody\");\n            totalnum++;\n            totalMoney = totalMoney + item.price*item.num;\n        });\n    }\n\n    //小计\n    $(\"#total-num\").text(totalnum);\n    $(\"#total-price\").text(\"￥\"+totalMoney);\n}\n"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/sort.js",
    "content": "$(document).ready(function(){\n    // $(\".data-item-li\").children(\"div\").addClass(\"to-big\");\n\t//分类栏隐藏显示\n\t$(\".list-group-item\").hover(function(){\n\t\t$(this).children(\"div.sort-detail\").show();\n\t},function(){\n\t\t$(this).children(\"div.sort-detail\").delay(1).hide(0);\n\t\t// $(this).children(\"div.sort-detail\").hide(10);\n\t});\n\n\t//幻灯片左右控制器\n\t$(\"#mycarousel\").hover(function(){\n\t\t$(this).children(\".carousel-control\").show();\n\t},function(){\n\t\t$(this).children(\".carousel-control\").hide();\n\t});\n\n\t//收藏按钮\n\t$(\".data-item-li\").hover(function(){\n\t\t//需处理显示哪个按钮\n\t\t// $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n\t\t$(this).find(\".like-button\").show();\n\t},function(){\n\t\t$(this).find(\".like-button\").hide();\n\t});\n\t\n\t$(\".info-a\").hover(function(){\n\t\t//需处理显示哪个按钮\n\t\t// $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n\t\t$(this).find(\".dropdown-menu\").show();\n\t},function(){\n\t\t$(this).find(\".dropdown-menu\").hide();\n\t});\n\n\t$('.like-button').click(function(){\n\t\t//$(this).removeClass(\"glyphicon-heart-empty\");\n        var goodsId = $(this).attr('data-id');\n        var isChangeBtn = true;\n        if(!$(this).hasClass('glyphicon-heart')) {\n            //收藏\n            $.ajax({\n                url:\"/shop/collect\",\n                type:\"POST\",\n                data:{\n                    goodsid:goodsId\n                },\n                success:function (result) {\n                    //收藏成功\n                    if(result.code === 200){\n                        location.href = \"/shop/login\";\n                        isChangeBtn = false;\n                    }\n                },\n                error:function () {\n                    alert(\"收藏失败\");\n                }\n            })\n        } else {\n            //取消收藏\n            $.ajax({\n                url:\"/shop/deleteCollect\",\n                type:\"POST\",\n                data:{\n                    goodsid:goodsId\n                },\n                success:function (result) {\n                    //取消收藏成功\n                    if(result.code === 200){\n                        location.href = \"/shop/login\";\n                        isChangeBtn = false;\n                    }\n                },\n                error:function () {\n                    alert(\"取消收藏失败\");\n                }\n            })\n        }\n\n\t\t/*$.post(\"servlet/CollectServlet\", {\n\t\t\tgoodsId: goodsId,\n\t\t\t});\n\t\t// alert(\"商品已加入购物车！\");*/\n\n\t\tif(isChangeBtn) {\n            $(this).toggleClass(\"glyphicon-heart glyphicon-heart-empty\");\n        }\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/templatemo-script.js",
    "content": "/*\n *\twww.templatemo.com\n *******************************************************/\n\n/* HTML document is loaded. DOM is ready. \n-----------------------------------------*/\n$(document).ready(function(){\n\n\t/* Mobile menu */\n\t$('.mobile-menu-icon').click(function(){\n\t\t$('.templatemo-left-nav').slideToggle();\t\t\t\t\n\t});\n\n\t/* Close the widget when clicked on close button */\n\t$('.templatemo-content-widget .fa-times').click(function(){\n\t\t$(this).parent().slideUp(function(){\n\t\t\t$(this).hide();\n\t\t});\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/userManage.js",
    "content": "/**\n * Created by 文辉 on 2017/7/23.\n */\n$(document).ready(function () {\n\n    var path = $(\"#path\").text();\n\n    var currentPage = 1;\n\n    to_page(path, 1);\n\n\n});\n\n$(document).on(\"click\",\".templatemo-delete-btn\",function () {\n    var goodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    swal({\n            title: \"确定删除\" + goodsname + \"吗？\",\n            type: \"warning\",\n            showCancelButton: true,\n            cancelButtonText:\"取消\",\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"确定删除！\",\n            closeOnConfirm: false,\n        },\n        function () {\n            /*swal(\"删除！\", \"你的虚拟文件已经被删除。\", \"success\");*/\n            $.ajax({\n                url: \"/shop/admin/user/delete/\" + goodsid,\n                type: \"DELETE\",\n                success:function (result) {\n                    swal(result.msg, \"\",\"success\");\n                    to_page('/shop',currentPage);\n                },\n                error:function () {\n                    /*to_page('/shop',currentPage);*/\n                }\n            });\n        });\n});\n\nfunction to_page(path, page) {\n    $.ajax({\n        url: path + \"/admin/user/showjson\",\n        data: \"page=\" + page,\n        type: \"get\",\n        success: function (result) {\n\n            //解析显示\n            build_user_table(path, result);\n\n            //页面信息\n            build_page_info(path, result);\n\n            //分页\n            build_page_nav(path, result);\n\n            currentPage = page;\n        }\n    });\n}\n\nfunction build_user_table(path,result) {\n    $(\"#goodsinfo tbody\").empty();\n    var goods = result.info.pageInfo.list;\n    $.each(goods, function (index,item) {\n        var userid = $(\"<td></td>\").append(item.userid);\n        var username = $(\"<td></td>\").append(item.username);\n        var email = $(\"<td></td>\").append(item.email);\n        var telephone = $(\"<td></td>\").append(item.telephone);\n\n        var deleteBtn = $(\"<button></button>\").addClass(\"templatemo-delete-btn\").append(\"删除\");\n\n        var deleteTd = $(\"<td></td>\").append(deleteBtn);\n\n\n        $(\"<tr></tr>\").append(userid)\n            .append(username)\n            .append(email)\n            .append(telephone)\n            .append(deleteTd).appendTo(\"#goodsinfo tbody\");\n    })\n}\n\nfunction build_page_info(path,result) {\n    $(\"#page-info-area\").empty();\n    $(\"#page-info-area\").append(\"当前第\"+ result.info.pageInfo.pageNum +\"页，总共\"+ result.info.pageInfo.pages +\"页，总共\"+ result.info.pageInfo.total +\"记录\")\n}\n\nfunction build_page_nav(path,result) {\n    $(\"#page-div-nav ul\").empty();\n    var pageUl = $(\"<ul></ul>\").addClass(\"pagination\")\n\n    var firstPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"首页\")));\n\n    var prePage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-backward\\\"></i></span>\")));\n\n    if(!result.info.pageInfo.hasPreviousPage) {\n        prePage.addClass(\"li-none\");\n    } else {\n        prePage.click(function () {\n            to_page('/shop',result.info.pageInfo.prePage);\n        });\n    }\n\n    //跳转\n    firstPage.click(function () {\n        to_page('/shop',1);\n    });\n\n    var nextPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-forward\\\"></i></span>\")));\n\n    var lastPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"末页\")));\n\n    if(!result.info.pageInfo.hasNextPage) {\n        nextPage.addClass(\"li-none\");\n    } else {\n        nextPage.click(function () {\n            to_page('/shop',result.info.pageInfo.nextPage);\n        });\n    }\n\n    lastPage.click(function () {\n        to_page('/shop',result.info.pageInfo.lastPage);\n    });\n\n    pageUl.append(firstPage).append(prePage);\n\n    $.each(result.info.pageInfo.navigatepageNums,function (index,item) {\n        var numLi = $(\"<li></li>\").append($(\"<a></a>\")\n            .append($(\"<span aria-hidden=\\\"true\\\"></span>\").append(item)));\n        if(result.info.pageInfo.pageNum === item) {\n            numLi.addClass(\"active\");\n        }\n        numLi.click(function () {\n            to_page('/shop',item);\n        });\n        pageUl.append(numLi);\n    });\n\n    pageUl.append(nextPage).append(lastPage).appendTo(\"#page-div-nav\");\n}"
  },
  {
    "path": "ssmschoolshop/src/main/webapp/js/validate.js",
    "content": "\n$.validator.setDefaults({\n\tsubmitHandler: function() {\n\t\tform.submit();\n\t}\n});\n$(document).ready(function() {\n\t$('#form').validate({\n\t\trules: {\n\t\t\tusername: \"required\",\n            telephone: {\n\t\t\t\trequired: true,\n\t\t\t},\n            email: {\n\t\t\t\trequired: true,\n\t\t\t\temail: true,\n\t\t\t},\n            password: {\n\t\t\t\trequired: true,\n\t\t\t\tminlength: 8,\n\t\t\t},\n\t\t\tconfirmPassword: {\n\t\t\t\trequired: true,\n\t\t\t\tminlength: 8,\n\t\t\t\tequalTo: \"#password\",\n\t\t\t}\n\t\t},\n\t\tmessages: {\n            username: \"用户名不能为空\",\n            telephone: \"联系电话不能为空\",\n            email: {\n\t\t\t\trequired: \"邮箱输入不能为空\",\n\t\t\t\temail: \"请输入一个正确的邮箱\",\n\t\t\t},\n            password: {\n\t\t\t\trequired: \"密码输入不能为空\",\n\t\t\t\tminlength: \"密码长度不能小于8位\",\n\t\t\t},\n\t\t\tconfirmPassword: {\n\t\t\t\trequired: \"输入不能为空\",\n\t\t\t\tminlength: \"密码长度不能小于8位\",\n\t\t\t\tequalTo: \"两次密码输入不一致\",\n\t\t\t}\n\t\t}\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/src/test/java/com/zhang/test/MBGTest.java",
    "content": "package com.zhang.test;\n\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.mybatis.generator.api.MyBatisGenerator;\nimport org.mybatis.generator.config.Configuration;\nimport org.mybatis.generator.config.xml.ConfigurationParser;\nimport org.mybatis.generator.exception.InvalidConfigurationException;\nimport org.mybatis.generator.exception.XMLParserException;\nimport org.mybatis.generator.internal.DefaultShellCallback;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.sql.SQLException;\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Mybatis 逆向工程生成代码\n */\n@Ignore\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(locations={\"classpath:applicationContext.xml\"})\npublic class MBGTest {\n    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {\n        List<String> warnings = new ArrayList<String>();\n        boolean overwrite = true;\n        File configFile = new File(\"generatorConfig.xml\");\n        ConfigurationParser cp = new ConfigurationParser(warnings);\n        Configuration config = cp.parseConfiguration(configFile);\n        DefaultShellCallback callback = new DefaultShellCallback(overwrite);\n        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);\n        myBatisGenerator.generate(null);\n    }\n}\n"
  },
  {
    "path": "ssmschoolshop/ssmschoolshop.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"web\" name=\"Web\">\n      <configuration>\n        <descriptors>\n          <deploymentDescriptor name=\"web.xml\" url=\"file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml\" />\n        </descriptors>\n        <webroots>\n          <root url=\"file://$MODULE_DIR$/src/main/webapp\" relative=\"/\" />\n        </webroots>\n        <sourceRoots>\n          <root url=\"file://$MODULE_DIR$/src/main/java\" />\n          <root url=\"file://$MODULE_DIR$/src/main/resources\" />\n        </sourceRoots>\n      </configuration>\n    </facet>\n  </component>\n</module>"
  },
  {
    "path": "ssmschoolshop/target/classes/applicationContext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:aop=\"http://www.springframework.org/schema/aop\" xmlns:tx=\"http://www.springframework.org/schema/tx\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\n        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd\n        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd\n        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd\n        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd\n        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd\">\n\n    <!--xmlns:context=\"http://www.springframework.org/schema/context\"-->\n    <!--除了控制器都扫描，和SpringMVC相反-->\n    <context:component-scan base-package=\"com.zhang.ssmschoolshop\">\n        <context:exclude-filter type=\"annotation\" expression=\"org.springframework.stereotype.Controller\"></context:exclude-filter>\n    </context:component-scan>\n    <!--Spring的配置文件，这里主要配置和业务逻辑有关的-->\n    <!--数据源，事务控制。。-->\n\n    <context:property-placeholder location=\"classpath:dbconfig.properties\"/>\n    <!--<bean id=\"propertyConfigurer\" class=\"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer\">\n        <property name=\"location\" value=\"classpath:dbconfig.properties\"/>\n    </bean>-->\n    <bean id=\"pooledDataSource\" class=\"com.mchange.v2.c3p0.ComboPooledDataSource\">\n        <property name=\"jdbcUrl\" value=\"${jdbc.jdbcUrl}\"></property>\n        <property name=\"driverClass\" value=\"${jdbc.driverClass}\"></property>\n        <property name=\"user\" value=\"${jdbc.user}\"></property>\n        <property name=\"password\" value=\"${jdbc.password}\"></property>\n    </bean>\n\n    <!--配置和MyBatis的整合-->\n    <bean id=\"sqlSessionFactory\" class=\"org.mybatis.spring.SqlSessionFactoryBean\">\n        <!--指定MyBatis的全局配置文件-->\n        <property name=\"configLocation\" value=\"classpath:mybatis-config.xml\"></property>\n        <property name=\"dataSource\" ref=\"pooledDataSource\"></property>\n        <!--指定mybatis的mapper配置文件-->\n        <property name=\"mapperLocations\" value=\"classpath:mapper/*.xml\"></property>\n    </bean>\n\n    <!--配置扫描器，将MyBatis接口的实现加入到ioc容器中-->\n    <bean class=\"org.mybatis.spring.mapper.MapperScannerConfigurer\">\n        <!--扫描所有dao接口的实现，加入到ioc容器中-->\n        <property name=\"basePackage\" value=\"com.zhang.ssmschoolshop.dao\"></property>\n    </bean>\n    <!--   -->\n\n    <!--事务控制的配置-->\n    <bean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\">\n        <!--控制住数据源-->\n        <property name=\"dataSource\" ref=\"pooledDataSource\"></property>\n    </bean>\n    <!--开启基于注解的事务，使用xml配置形式的事务（必要主要的都是使用配置式）-->\n    <aop:config>\n        <!--切入点表达式-->\n        <aop:pointcut expression=\"execution(* com.zhang.ssmschoolshop.service..*(..))\" id=\"txPoint\" />\n        <!--配置事务增强-->\n        <aop:advisor advice-ref=\"txAdvice\" pointcut-ref=\"txPoint\" />\n    </aop:config>\n\n    <!--配置事务增强，事务如何切入-->\n    <tx:advice id=\"txAdvice\" transaction-manager=\"transactionManager\">\n        <tx:attributes>\n            <!--所有方法都是事务方法-->\n            <tx:method name=\"*\"/>\n            <!--以get开始的所有方法-->\n            <tx:method name=\"get\" read-only=\"true\"/>\n        </tx:attributes>\n    </tx:advice>\n    <!--    -->\n\n    <!--Spring配置文件的核心点（数据源、与MyBatis的整合、事务控制-->\n\n</beans>"
  },
  {
    "path": "ssmschoolshop/target/classes/dbconfig.properties",
    "content": "jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/db_shopmaster?useUnicode=true&characterEncoding=utf8\njdbc.driverClass=com.mysql.jdbc.Driver\njdbc.user=root\njdbc.password=123456\n##115.159.219.190   iiotfantas123"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/ActivityMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ActivityMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Activity\">\n    <id column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n    <result column=\"activityName\" jdbcType=\"VARCHAR\" property=\"activityname\" />\n    <result column=\"activityDes\" jdbcType=\"VARCHAR\" property=\"activitydes\" />\n    <result column=\"discount\" jdbcType=\"REAL\" property=\"discount\" />\n    <result column=\"fullPrice\" jdbcType=\"INTEGER\" property=\"fullprice\" />\n    <result column=\"reducePrice\" jdbcType=\"INTEGER\" property=\"reduceprice\" />\n    <result column=\"fullNum\" jdbcType=\"INTEGER\" property=\"fullnum\" />\n    <result column=\"reduceNum\" jdbcType=\"INTEGER\" property=\"reducenum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    activityId, activityName, activityDes, discount, fullPrice, reducePrice, fullNum, \n    reduceNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\">\n    delete from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity (activityId, activityName, activityDes, \n      discount, fullPrice, reducePrice, \n      fullNum, reduceNum)\n    values (#{activityid,jdbcType=INTEGER}, #{activityname,jdbcType=VARCHAR}, #{activitydes,jdbcType=VARCHAR}, \n      #{discount,jdbcType=REAL}, #{fullprice,jdbcType=INTEGER}, #{reduceprice,jdbcType=INTEGER}, \n      #{fullnum,jdbcType=INTEGER}, #{reducenum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"activityname != null\">\n        activityName,\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes,\n      </if>\n      <if test=\"discount != null\">\n        discount,\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice,\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice,\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum,\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"activityname != null\">\n        #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        #{reducenum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultType=\"java.lang.Long\">\n    select count(*) from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update activity\n    <set>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.activityname != null\">\n        activityName = #{record.activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activitydes != null\">\n        activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.discount != null\">\n        discount = #{record.discount,jdbcType=REAL},\n      </if>\n      <if test=\"record.fullprice != null\">\n        fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reduceprice != null\">\n        reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.fullnum != null\">\n        fullNum = #{record.fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reducenum != null\">\n        reduceNum = #{record.reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update activity\n    set activityId = #{record.activityid,jdbcType=INTEGER},\n      activityName = #{record.activityname,jdbcType=VARCHAR},\n      activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      discount = #{record.discount,jdbcType=REAL},\n      fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      fullNum = #{record.fullnum,jdbcType=INTEGER},\n      reduceNum = #{record.reducenum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    <set>\n      <if test=\"activityname != null\">\n        activityName = #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes = #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        discount = #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice = #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice = #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum = #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum = #{reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    set activityName = #{activityname,jdbcType=VARCHAR},\n      activityDes = #{activitydes,jdbcType=VARCHAR},\n      discount = #{discount,jdbcType=REAL},\n      fullPrice = #{fullprice,jdbcType=INTEGER},\n      reducePrice = #{reduceprice,jdbcType=INTEGER},\n      fullNum = #{fullnum,jdbcType=INTEGER},\n      reduceNum = #{reducenum,jdbcType=INTEGER}\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/AddressMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AddressMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Address\">\n    <id column=\"addressID\" jdbcType=\"INTEGER\" property=\"addressid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"province\" jdbcType=\"VARCHAR\" property=\"province\" />\n    <result column=\"city\" jdbcType=\"VARCHAR\" property=\"city\" />\n    <result column=\"county\" jdbcType=\"VARCHAR\" property=\"county\" />\n    <result column=\"detailAddr\" jdbcType=\"VARCHAR\" property=\"detailaddr\" />\n    <result column=\"conName\" jdbcType=\"VARCHAR\" property=\"conname\" />\n    <result column=\"conTel\" jdbcType=\"VARCHAR\" property=\"contel\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    addressID, userId, province, city, county, detailAddr, conName, conTel\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\">\n    delete from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address (addressID, userId, province, \n      city, county, detailAddr, \n      conName, conTel)\n    values (#{addressid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, \n      #{city,jdbcType=VARCHAR}, #{county,jdbcType=VARCHAR}, #{detailaddr,jdbcType=VARCHAR}, \n      #{conname,jdbcType=VARCHAR}, #{contel,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        addressID,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"province != null\">\n        province,\n      </if>\n      <if test=\"city != null\">\n        city,\n      </if>\n      <if test=\"county != null\">\n        county,\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr,\n      </if>\n      <if test=\"conname != null\">\n        conName,\n      </if>\n      <if test=\"contel != null\">\n        conTel,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        #{contel,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultType=\"java.lang.Long\">\n    select count(*) from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update address\n    <set>\n      <if test=\"record.addressid != null\">\n        addressID = #{record.addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.province != null\">\n        province = #{record.province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.city != null\">\n        city = #{record.city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.county != null\">\n        county = #{record.county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.detailaddr != null\">\n        detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.conname != null\">\n        conName = #{record.conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.contel != null\">\n        conTel = #{record.contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update address\n    set addressID = #{record.addressid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      province = #{record.province,jdbcType=VARCHAR},\n      city = #{record.city,jdbcType=VARCHAR},\n      county = #{record.county,jdbcType=VARCHAR},\n      detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      conName = #{record.conname,jdbcType=VARCHAR},\n      conTel = #{record.contel,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        province = #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        city = #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        county = #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        conName = #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        conTel = #{contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    set userId = #{userid,jdbcType=INTEGER},\n      province = #{province,jdbcType=VARCHAR},\n      city = #{city,jdbcType=VARCHAR},\n      county = #{county,jdbcType=VARCHAR},\n      detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      conName = #{conname,jdbcType=VARCHAR},\n      conTel = #{contel,jdbcType=VARCHAR}\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/AdminMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AdminMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Admin\">\n    <id column=\"adminId\" jdbcType=\"INTEGER\" property=\"adminid\" />\n    <result column=\"adminName\" jdbcType=\"VARCHAR\" property=\"adminname\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    adminId, adminName, password\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </select>\n  <select id=\"selectByName\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\" resultMap=\"BaseResultMap\">\n    select\n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminName = #{adminname}\n    <if test=\"password != null\">\n      and password = #{password}\n    </if>\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\">\n    delete from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin (adminId, adminName, password\n      )\n    values (#{adminid,jdbcType=INTEGER}, #{adminname,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        adminId,\n      </if>\n      <if test=\"adminname != null\">\n        adminName,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        #{adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"adminname != null\">\n        #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultType=\"java.lang.Long\">\n    select count(*) from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update admin\n    <set>\n      <if test=\"record.adminid != null\">\n        adminId = #{record.adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.adminname != null\">\n        adminName = #{record.adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update admin\n    set adminId = #{record.adminid,jdbcType=INTEGER},\n      adminName = #{record.adminname,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    <set>\n      <if test=\"adminname != null\">\n        adminName = #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    set adminName = #{adminname,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR}\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/CategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CategoryMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Category\">\n    <id column=\"cateId\" jdbcType=\"INTEGER\" property=\"cateid\" />\n    <result column=\"cateName\" jdbcType=\"VARCHAR\" property=\"catename\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    cateId, cateName\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 8\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\">\n    delete from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category (cateId, cateName)\n    values (#{cateid,jdbcType=INTEGER}, #{catename,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        cateId,\n      </if>\n      <if test=\"catename != null\">\n        cateName,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        #{cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catename != null\">\n        #{catename,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultType=\"java.lang.Long\">\n    select count(*) from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update category\n    <set>\n      <if test=\"record.cateid != null\">\n        cateId = #{record.cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catename != null\">\n        cateName = #{record.catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update category\n    set cateId = #{record.cateid,jdbcType=INTEGER},\n      cateName = #{record.catename,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    <set>\n      <if test=\"catename != null\">\n        cateName = #{catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    set cateName = #{catename,jdbcType=VARCHAR}\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/ChatMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ChatMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Chat\">\n    <id column=\"chatId\" jdbcType=\"INTEGER\" property=\"chatid\" />\n    <result column=\"sendUser\" jdbcType=\"INTEGER\" property=\"senduser\" />\n    <result column=\"receiveUser\" jdbcType=\"INTEGER\" property=\"receiveuser\" />\n    <result column=\"MsgContent\" jdbcType=\"VARCHAR\" property=\"msgcontent\" />\n    <result column=\"MsgTime\" jdbcType=\"TIMESTAMP\" property=\"msgtime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    chatId, sendUser, receiveUser, MsgContent, MsgTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from chat\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from chat\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\">\n    delete from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    insert into chat (chatId, sendUser, receiveUser, \n      MsgContent, MsgTime)\n    values (#{chatid,jdbcType=INTEGER}, #{senduser,jdbcType=INTEGER}, #{receiveuser,jdbcType=INTEGER}, \n      #{msgcontent,jdbcType=VARCHAR}, #{msgtime,jdbcType=TIMESTAMP})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    insert into chat\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"chatid != null\">\n        chatId,\n      </if>\n      <if test=\"senduser != null\">\n        sendUser,\n      </if>\n      <if test=\"receiveuser != null\">\n        receiveUser,\n      </if>\n      <if test=\"msgcontent != null\">\n        MsgContent,\n      </if>\n      <if test=\"msgtime != null\">\n        MsgTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"chatid != null\">\n        #{chatid,jdbcType=INTEGER},\n      </if>\n      <if test=\"senduser != null\">\n        #{senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"receiveuser != null\">\n        #{receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"msgcontent != null\">\n        #{msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"msgtime != null\">\n        #{msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\" resultType=\"java.lang.Long\">\n    select count(*) from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update chat\n    <set>\n      <if test=\"record.chatid != null\">\n        chatId = #{record.chatid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.senduser != null\">\n        sendUser = #{record.senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.receiveuser != null\">\n        receiveUser = #{record.receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.msgcontent != null\">\n        MsgContent = #{record.msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.msgtime != null\">\n        MsgTime = #{record.msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update chat\n    set chatId = #{record.chatid,jdbcType=INTEGER},\n      sendUser = #{record.senduser,jdbcType=INTEGER},\n      receiveUser = #{record.receiveuser,jdbcType=INTEGER},\n      MsgContent = #{record.msgcontent,jdbcType=VARCHAR},\n      MsgTime = #{record.msgtime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    update chat\n    <set>\n      <if test=\"senduser != null\">\n        sendUser = #{senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"receiveuser != null\">\n        receiveUser = #{receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"msgcontent != null\">\n        MsgContent = #{msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"msgtime != null\">\n        MsgTime = #{msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    update chat\n    set sendUser = #{senduser,jdbcType=INTEGER},\n      receiveUser = #{receiveuser,jdbcType=INTEGER},\n      MsgContent = #{msgcontent,jdbcType=VARCHAR},\n      MsgTime = #{msgtime,jdbcType=TIMESTAMP}\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/CommentMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CommentMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Comment\">\n    <id column=\"commentId\" jdbcType=\"INTEGER\" property=\"commentid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"point\" jdbcType=\"INTEGER\" property=\"point\" />\n    <result column=\"content\" jdbcType=\"VARCHAR\" property=\"content\" />\n    <result column=\"commentTime\" jdbcType=\"TIMESTAMP\" property=\"commenttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    commentId, userId, goodsId, point, content, commentTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\">\n    delete from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment (commentId, userId, goodsId, \n      point, content, commentTime\n      )\n    values (#{commentid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{point,jdbcType=INTEGER}, #{content,jdbcType=VARCHAR}, #{commenttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        commentId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"point != null\">\n        point,\n      </if>\n      <if test=\"content != null\">\n        content,\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        #{commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultType=\"java.lang.Long\">\n    select count(*) from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update comment\n    <set>\n      <if test=\"record.commentid != null\">\n        commentId = #{record.commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.point != null\">\n        point = #{record.point,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.content != null\">\n        content = #{record.content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.commenttime != null\">\n        commentTime = #{record.commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update comment\n    set commentId = #{record.commentid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      point = #{record.point,jdbcType=INTEGER},\n      content = #{record.content,jdbcType=VARCHAR},\n      commentTime = #{record.commenttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        point = #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        content = #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime = #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    set userId = #{userid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      point = #{point,jdbcType=INTEGER},\n      content = #{content,jdbcType=VARCHAR},\n      commentTime = #{commenttime,jdbcType=TIMESTAMP}\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/DeliverMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.DeliverMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    <id column=\"deliverId\" jdbcType=\"INTEGER\" property=\"deliverid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"sendId\" jdbcType=\"INTEGER\" property=\"sendid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    deliverId, orderId, sendId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from deliver\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from deliver\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\">\n    delete from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    insert into deliver (deliverId, orderId, sendId\n      )\n    values (#{deliverid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{sendid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    insert into deliver\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"deliverid != null\">\n        deliverId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"sendid != null\">\n        sendId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"deliverid != null\">\n        #{deliverid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"sendid != null\">\n        #{sendid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\" resultType=\"java.lang.Long\">\n    select count(*) from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update deliver\n    <set>\n      <if test=\"record.deliverid != null\">\n        deliverId = #{record.deliverid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.sendid != null\">\n        sendId = #{record.sendid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update deliver\n    set deliverId = #{record.deliverid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      sendId = #{record.sendid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    update deliver\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"sendid != null\">\n        sendId = #{sendid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    update deliver\n    set orderId = #{orderid,jdbcType=INTEGER},\n      sendId = #{sendid,jdbcType=INTEGER}\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/FavoriteMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.FavoriteMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"collectTime\" jdbcType=\"TIMESTAMP\" property=\"collecttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsId, collectTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\">\n    delete from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\">\n    delete from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection (userId, goodsId, collectTime\n      )\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{collecttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"collecttime != null\">\n        collectTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"collecttime != null\">\n        #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultType=\"java.lang.Long\">\n    select count(*) from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update collection\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.collecttime != null\">\n        collectTime = #{record.collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update collection\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      collectTime = #{record.collecttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    <set>\n      <if test=\"collecttime != null\">\n        collectTime = #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    set collectTime = #{collecttime,jdbcType=TIMESTAMP}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/GoodsMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.GoodsMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"goodsName\" jdbcType=\"VARCHAR\" property=\"goodsname\" />\n    <result column=\"price\" jdbcType=\"INTEGER\" property=\"price\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n    <result column=\"upTime\" jdbcType=\"TIMESTAMP\" property=\"uptime\" />\n    <result column=\"category\" jdbcType=\"INTEGER\" property=\"category\" />\n    <result column=\"detailCate\" jdbcType=\"VARCHAR\" property=\"detailcate\" />\n    <result column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n  </resultMap>\n\n  <resultMap extends=\"BaseResultMap\" id=\"ResultMapWithBLOBs\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <result column=\"description\" jdbcType=\"LONGVARCHAR\" property=\"description\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    goodsId, goodsName, price, num, upTime, category, detailCate, activityId\n  </sql>\n  <sql id=\"Blob_Column_List\">\n    description\n  </sql>\n\n  <select id=\"selectByExampleWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n<!-- ,<include refid=\"Blob_Column_List\" />-->\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleWithBLOBsLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 10\n  </select>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"ResultMapWithBLOBs\">\n    select \n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\">\n    delete from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    insert into goods (goodsId, goodsName, price, \n      num, upTime, category, \n      detailCate, activityId, description\n      )\n    values (#{goodsid,jdbcType=INTEGER}, #{goodsname,jdbcType=VARCHAR}, #{price,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER}, #{uptime,jdbcType=TIMESTAMP}, #{category,jdbcType=INTEGER}, \n      #{detailcate,jdbcType=VARCHAR}, #{activityid,jdbcType=INTEGER}, #{description,jdbcType=LONGVARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\" useGeneratedKeys=\"true\" keyProperty=\"goodsid\">\n    insert into goods\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"goodsname != null\">\n        goodsName,\n      </if>\n      <if test=\"price != null\">\n        price,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n      <if test=\"uptime != null\">\n        upTime,\n      </if>\n      <if test=\"category != null\">\n        category,\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate,\n      </if>\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"description != null\">\n        description,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsname != null\">\n        #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultType=\"java.lang.Long\">\n    select count(*) from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update goods\n    <set>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsname != null\">\n        goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.price != null\">\n        price = #{record.price,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.uptime != null\">\n        upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.category != null\">\n        category = #{record.category,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.detailcate != null\">\n        detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.description != null\">\n        description = #{record.description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExampleWithBLOBs\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER},\n      description = #{record.description,jdbcType=LONGVARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    <set>\n      <if test=\"goodsname != null\">\n        goodsName = #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        price = #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        upTime = #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        category = #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate = #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        activityId = #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        description = #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKeyWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER},\n      description = #{description,jdbcType=LONGVARCHAR}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/ImagePathMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ImagePathMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    <id column=\"pathId\" jdbcType=\"INTEGER\" property=\"pathid\" />\n    <result column=\"goodId\" jdbcType=\"INTEGER\" property=\"goodid\" />\n    <result column=\"path\" jdbcType=\"VARCHAR\" property=\"path\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    pathId, goodId, path\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\">\n    delete from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath (pathId, goodId, path\n      )\n    values (#{pathid,jdbcType=INTEGER}, #{goodid,jdbcType=INTEGER}, #{path,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        pathId,\n      </if>\n      <if test=\"goodid != null\">\n        goodId,\n      </if>\n      <if test=\"path != null\">\n        path,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        #{pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodid != null\">\n        #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        #{path,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultType=\"java.lang.Long\">\n    select count(*) from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update imagepath\n    <set>\n      <if test=\"record.pathid != null\">\n        pathId = #{record.pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodid != null\">\n        goodId = #{record.goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.path != null\">\n        path = #{record.path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update imagepath\n    set pathId = #{record.pathid,jdbcType=INTEGER},\n      goodId = #{record.goodid,jdbcType=INTEGER},\n      path = #{record.path,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    <set>\n      <if test=\"goodid != null\">\n        goodId = #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        path = #{path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    set goodId = #{goodid,jdbcType=INTEGER},\n      path = #{path,jdbcType=VARCHAR}\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/OrderItemMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderItemMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    <id column=\"itemId\" jdbcType=\"INTEGER\" property=\"itemid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    itemId, orderId, goodsId, num\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\">\n    delete from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem (itemId, orderId, goodsId, \n      num)\n    values (#{itemid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        itemId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        #{itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultType=\"java.lang.Long\">\n    select count(*) from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update orderitem\n    <set>\n      <if test=\"record.itemid != null\">\n        itemId = #{record.itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update orderitem\n    set itemId = #{record.itemid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n    </set>\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    set orderId = #{orderid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER}\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/OrderMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Order\">\n    <id column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"orderTime\" jdbcType=\"TIMESTAMP\" property=\"ordertime\" />\n    <result column=\"oldPrice\" jdbcType=\"REAL\" property=\"oldprice\" />\n    <result column=\"newPrice\" jdbcType=\"REAL\" property=\"newprice\" />\n    <result column=\"isPay\" jdbcType=\"BIT\" property=\"ispay\" />\n    <result column=\"isSend\" jdbcType=\"BIT\" property=\"issend\" />\n    <result column=\"isReceive\" jdbcType=\"BIT\" property=\"isreceive\" />\n    <result column=\"isComplete\" jdbcType=\"BIT\" property=\"iscomplete\" />\n    <result column=\"addressId\" jdbcType=\"INTEGER\" property=\"addressid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    orderId, userId, orderTime, oldPrice, newPrice, isPay, isSend, isReceive, isComplete, \n    addressId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\">\n    delete from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    insert into indent (orderId, userId, orderTime, \n      oldPrice, newPrice, isPay, isSend, \n      isReceive, isComplete, addressId\n      )\n    values (#{orderid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{ordertime,jdbcType=TIMESTAMP}, \n      #{oldprice,jdbcType=REAL}, #{newprice,jdbcType=REAL}, #{ispay,jdbcType=BIT}, #{issend,jdbcType=BIT}, \n      #{isreceive,jdbcType=BIT}, #{iscomplete,jdbcType=BIT}, #{addressid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\" useGeneratedKeys=\"true\" keyProperty=\"orderid\">\n    insert into indent\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime,\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice,\n      </if>\n      <if test=\"newprice != null\">\n        newPrice,\n      </if>\n      <if test=\"ispay != null\">\n        isPay,\n      </if>\n      <if test=\"issend != null\">\n        isSend,\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive,\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete,\n      </if>\n      <if test=\"addressid != null\">\n        addressId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultType=\"java.lang.Long\">\n    select count(*) from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update indent\n    <set>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.ordertime != null\">\n        orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.oldprice != null\">\n        oldPrice = #{record.oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.newprice != null\">\n        newPrice = #{record.newprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.ispay != null\">\n        isPay = #{record.ispay,jdbcType=BIT},\n      </if>\n      <if test=\"record.issend != null\">\n        isSend = #{record.issend,jdbcType=BIT},\n      </if>\n      <if test=\"record.isreceive != null\">\n        isReceive = #{record.isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"record.iscomplete != null\">\n        isComplete = #{record.iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"record.addressid != null\">\n        addressId = #{record.addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update indent\n    set orderId = #{record.orderid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{record.oldprice,jdbcType=REAL},\n      newPrice = #{record.newprice,jdbcType=REAL},\n      isPay = #{record.ispay,jdbcType=BIT},\n      isSend = #{record.issend,jdbcType=BIT},\n      isReceive = #{record.isreceive,jdbcType=BIT},\n      isComplete = #{record.iscomplete,jdbcType=BIT},\n      addressId = #{record.addressid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice = #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        newPrice = #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        isPay = #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        isSend = #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive = #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete = #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        addressId = #{addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    set userId = #{userid,jdbcType=INTEGER},\n      orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{oldprice,jdbcType=REAL},\n      newPrice = #{newprice,jdbcType=REAL},\n      isPay = #{ispay,jdbcType=BIT},\n      isSend = #{issend,jdbcType=BIT},\n      isReceive = #{isreceive,jdbcType=BIT},\n      isComplete = #{iscomplete,jdbcType=BIT},\n      addressId = #{addressid,jdbcType=INTEGER}\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/ShopCartMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ShopCartMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsid\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"cateDate\" jdbcType=\"TIMESTAMP\" property=\"catedate\" />\n    <result column=\"goodsNum\" jdbcType=\"INTEGER\" property=\"goodsnum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsid, cateDate, goodsNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\">\n    delete from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\">\n    delete from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart (userId, goodsid, cateDate, \n      goodsNum)\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{catedate,jdbcType=TIMESTAMP}, \n      #{goodsnum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsid,\n      </if>\n      <if test=\"catedate != null\">\n        cateDate,\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catedate != null\">\n        #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultType=\"java.lang.Long\">\n    select count(*) from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update shopcart\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsid = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catedate != null\">\n        cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.goodsnum != null\">\n        goodsNum = #{record.goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update shopcart\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsid = #{record.goodsid,jdbcType=INTEGER},\n      cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{record.goodsnum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    <set>\n      <if test=\"catedate != null\">\n        cateDate = #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum = #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    set cateDate = #{catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{goodsnum,jdbcType=INTEGER}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mapper/UserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.UserMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.User\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"username\" jdbcType=\"VARCHAR\" property=\"username\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n    <result column=\"regTime\" jdbcType=\"TIMESTAMP\" property=\"regtime\" />\n    <result column=\"email\" jdbcType=\"VARCHAR\" property=\"email\" />\n    <result column=\"telephone\" jdbcType=\"VARCHAR\" property=\"telephone\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, username, password, regTime, email, telephone\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\">\n    delete from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user (userId, username, password, \n      regTime, email, telephone\n      )\n    values (#{userid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, \n      #{regtime,jdbcType=TIMESTAMP}, #{email,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"username != null\">\n        username,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n      <if test=\"regtime != null\">\n        regTime,\n      </if>\n      <if test=\"email != null\">\n        email,\n      </if>\n      <if test=\"telephone != null\">\n        telephone,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"username != null\">\n        #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        #{telephone,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultType=\"java.lang.Long\">\n    select count(*) from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update user\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.username != null\">\n        username = #{record.username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.regtime != null\">\n        regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.email != null\">\n        email = #{record.email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.telephone != null\">\n        telephone = #{record.telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update user\n    set userId = #{record.userid,jdbcType=INTEGER},\n      username = #{record.username,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR},\n      regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      email = #{record.email,jdbcType=VARCHAR},\n      telephone = #{record.telephone,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    <set>\n      <if test=\"username != null\">\n        username = #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        regTime = #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        email = #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        telephone = #{telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    set username = #{username,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR},\n      regTime = #{regtime,jdbcType=TIMESTAMP},\n      email = #{email,jdbcType=VARCHAR},\n      telephone = #{telephone,jdbcType=VARCHAR}\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/classes/mybatis-config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!DOCTYPE configuration\n        PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\"\n        \"http://mybatis.org/dtd/mybatis-3-config.dtd\">\n<configuration>\n    <settings>\n        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n    </settings>\n\n    <typeAliases>\n        <package name=\"com.zhang.ssmschoolshop.entity\" />\n    </typeAliases>\n\n    <!--分页插件-->\n    <plugins>\n        <plugin interceptor=\"com.github.pagehelper.PageInterceptor\"/>\n    </plugins>\n\n</configuration>"
  },
  {
    "path": "ssmschoolshop/target/classes/spring-mvc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:mvc=\"http://www.springframework.org/schema/mvc\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd\">\n\n    <!--SpringMVC的配置，包含网站跳转逻辑的控制配置-->\n    <context:component-scan base-package=\"com.zhang.ssmschoolshop\" use-default-filters=\"false\">\n        <!--只扫描控制器-->\n        <context:include-filter type=\"annotation\" expression=\"org.springframework.stereotype.Controller\"></context:include-filter>\n    </context:component-scan>\n\n    <!--配置视图解析器，方便页面返回-->\n    <bean class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\">\n        <property name=\"prefix\" value=\"/WEB-INF/views/\"></property>\n        <property name=\"suffix\" value=\".jsp\"></property>\n    </bean>\n\n    <!--两个标准配置-->\n    <!--将springmvc不能处理的请求交给tomcat-->\n    <mvc:default-servlet-handler />\n    <!--能支持springMVC的更高级的一些功能，JSP303校验，快捷的ajax。。映射动态请求-->\n    <mvc:annotation-driven />\n\n    <!-- 文件上传配置 -->\n    <bean name=\"multipartResolver\" class=\"org.springframework.web.multipart.commons.CommonsMultipartResolver\">\n        <!-- 默认编码 -->\n        <property name=\"defaultEncoding\" value=\"UTF-8\"/>\n        <!-- 上传文件大小限制为31M，31*1024*1024 -->\n        <property name=\"maxUploadSize\" value=\"32505856\"/>\n        <!-- 内存中的最大值 -->\n        <property name=\"maxInMemorySize\" value=\"4096\"/>\n    </bean>\n\n</beans>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/META-INF/MANIFEST.MF",
    "content": "Manifest-Version: 1.0\r\nBuilt-By: Person\r\nCreated-By: IntelliJ IDEA\r\nBuild-Jdk: 1.8.0_151\r\n\r\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/applicationContext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:aop=\"http://www.springframework.org/schema/aop\" xmlns:tx=\"http://www.springframework.org/schema/tx\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\n        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd\n        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd\n        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd\n        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd\n        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd\">\n\n    <!--xmlns:context=\"http://www.springframework.org/schema/context\"-->\n    <!--除了控制器都扫描，和SpringMVC相反-->\n    <context:component-scan base-package=\"com.zhang.ssmschoolshop\">\n        <context:exclude-filter type=\"annotation\" expression=\"org.springframework.stereotype.Controller\"></context:exclude-filter>\n    </context:component-scan>\n    <!--Spring的配置文件，这里主要配置和业务逻辑有关的-->\n    <!--数据源，事务控制。。-->\n\n    <context:property-placeholder location=\"classpath:dbconfig.properties\"/>\n    <!--<bean id=\"propertyConfigurer\" class=\"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer\">\n        <property name=\"location\" value=\"classpath:dbconfig.properties\"/>\n    </bean>-->\n    <bean id=\"pooledDataSource\" class=\"com.mchange.v2.c3p0.ComboPooledDataSource\">\n        <property name=\"jdbcUrl\" value=\"${jdbc.jdbcUrl}\"></property>\n        <property name=\"driverClass\" value=\"${jdbc.driverClass}\"></property>\n        <property name=\"user\" value=\"${jdbc.user}\"></property>\n        <property name=\"password\" value=\"${jdbc.password}\"></property>\n    </bean>\n\n    <!--配置和MyBatis的整合-->\n    <bean id=\"sqlSessionFactory\" class=\"org.mybatis.spring.SqlSessionFactoryBean\">\n        <!--指定MyBatis的全局配置文件-->\n        <property name=\"configLocation\" value=\"classpath:mybatis-config.xml\"></property>\n        <property name=\"dataSource\" ref=\"pooledDataSource\"></property>\n        <!--指定mybatis的mapper配置文件-->\n        <property name=\"mapperLocations\" value=\"classpath:mapper/*.xml\"></property>\n    </bean>\n\n    <!--配置扫描器，将MyBatis接口的实现加入到ioc容器中-->\n    <bean class=\"org.mybatis.spring.mapper.MapperScannerConfigurer\">\n        <!--扫描所有dao接口的实现，加入到ioc容器中-->\n        <property name=\"basePackage\" value=\"com.zhang.ssmschoolshop.dao\"></property>\n    </bean>\n    <!--   -->\n\n    <!--事务控制的配置-->\n    <bean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\">\n        <!--控制住数据源-->\n        <property name=\"dataSource\" ref=\"pooledDataSource\"></property>\n    </bean>\n    <!--开启基于注解的事务，使用xml配置形式的事务（必要主要的都是使用配置式）-->\n    <aop:config>\n        <!--切入点表达式-->\n        <aop:pointcut expression=\"execution(* com.zhang.ssmschoolshop.service..*(..))\" id=\"txPoint\" />\n        <!--配置事务增强-->\n        <aop:advisor advice-ref=\"txAdvice\" pointcut-ref=\"txPoint\" />\n    </aop:config>\n\n    <!--配置事务增强，事务如何切入-->\n    <tx:advice id=\"txAdvice\" transaction-manager=\"transactionManager\">\n        <tx:attributes>\n            <!--所有方法都是事务方法-->\n            <tx:method name=\"*\"/>\n            <!--以get开始的所有方法-->\n            <tx:method name=\"get\" read-only=\"true\"/>\n        </tx:attributes>\n    </tx:advice>\n    <!--    -->\n\n    <!--Spring配置文件的核心点（数据源、与MyBatis的整合、事务控制-->\n\n</beans>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/dbconfig.properties",
    "content": "jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/db_shopmaster?useUnicode=true&characterEncoding=utf8\njdbc.driverClass=com.mysql.jdbc.Driver\njdbc.user=root\njdbc.password=123456\n##115.159.219.190   iiotfantas123"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/ActivityMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ActivityMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Activity\">\n    <id column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n    <result column=\"activityName\" jdbcType=\"VARCHAR\" property=\"activityname\" />\n    <result column=\"activityDes\" jdbcType=\"VARCHAR\" property=\"activitydes\" />\n    <result column=\"discount\" jdbcType=\"REAL\" property=\"discount\" />\n    <result column=\"fullPrice\" jdbcType=\"INTEGER\" property=\"fullprice\" />\n    <result column=\"reducePrice\" jdbcType=\"INTEGER\" property=\"reduceprice\" />\n    <result column=\"fullNum\" jdbcType=\"INTEGER\" property=\"fullnum\" />\n    <result column=\"reduceNum\" jdbcType=\"INTEGER\" property=\"reducenum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    activityId, activityName, activityDes, discount, fullPrice, reducePrice, fullNum, \n    reduceNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from activity\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\">\n    delete from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity (activityId, activityName, activityDes, \n      discount, fullPrice, reducePrice, \n      fullNum, reduceNum)\n    values (#{activityid,jdbcType=INTEGER}, #{activityname,jdbcType=VARCHAR}, #{activitydes,jdbcType=VARCHAR}, \n      #{discount,jdbcType=REAL}, #{fullprice,jdbcType=INTEGER}, #{reduceprice,jdbcType=INTEGER}, \n      #{fullnum,jdbcType=INTEGER}, #{reducenum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    insert into activity\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"activityname != null\">\n        activityName,\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes,\n      </if>\n      <if test=\"discount != null\">\n        discount,\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice,\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice,\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum,\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"activityname != null\">\n        #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        #{reducenum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ActivityExample\" resultType=\"java.lang.Long\">\n    select count(*) from activity\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update activity\n    <set>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.activityname != null\">\n        activityName = #{record.activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activitydes != null\">\n        activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.discount != null\">\n        discount = #{record.discount,jdbcType=REAL},\n      </if>\n      <if test=\"record.fullprice != null\">\n        fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reduceprice != null\">\n        reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.fullnum != null\">\n        fullNum = #{record.fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.reducenum != null\">\n        reduceNum = #{record.reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update activity\n    set activityId = #{record.activityid,jdbcType=INTEGER},\n      activityName = #{record.activityname,jdbcType=VARCHAR},\n      activityDes = #{record.activitydes,jdbcType=VARCHAR},\n      discount = #{record.discount,jdbcType=REAL},\n      fullPrice = #{record.fullprice,jdbcType=INTEGER},\n      reducePrice = #{record.reduceprice,jdbcType=INTEGER},\n      fullNum = #{record.fullnum,jdbcType=INTEGER},\n      reduceNum = #{record.reducenum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    <set>\n      <if test=\"activityname != null\">\n        activityName = #{activityname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activitydes != null\">\n        activityDes = #{activitydes,jdbcType=VARCHAR},\n      </if>\n      <if test=\"discount != null\">\n        discount = #{discount,jdbcType=REAL},\n      </if>\n      <if test=\"fullprice != null\">\n        fullPrice = #{fullprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"reduceprice != null\">\n        reducePrice = #{reduceprice,jdbcType=INTEGER},\n      </if>\n      <if test=\"fullnum != null\">\n        fullNum = #{fullnum,jdbcType=INTEGER},\n      </if>\n      <if test=\"reducenum != null\">\n        reduceNum = #{reducenum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Activity\">\n    update activity\n    set activityName = #{activityname,jdbcType=VARCHAR},\n      activityDes = #{activitydes,jdbcType=VARCHAR},\n      discount = #{discount,jdbcType=REAL},\n      fullPrice = #{fullprice,jdbcType=INTEGER},\n      reducePrice = #{reduceprice,jdbcType=INTEGER},\n      fullNum = #{fullnum,jdbcType=INTEGER},\n      reduceNum = #{reducenum,jdbcType=INTEGER}\n    where activityId = #{activityid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/AddressMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AddressMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Address\">\n    <id column=\"addressID\" jdbcType=\"INTEGER\" property=\"addressid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"province\" jdbcType=\"VARCHAR\" property=\"province\" />\n    <result column=\"city\" jdbcType=\"VARCHAR\" property=\"city\" />\n    <result column=\"county\" jdbcType=\"VARCHAR\" property=\"county\" />\n    <result column=\"detailAddr\" jdbcType=\"VARCHAR\" property=\"detailaddr\" />\n    <result column=\"conName\" jdbcType=\"VARCHAR\" property=\"conname\" />\n    <result column=\"conTel\" jdbcType=\"VARCHAR\" property=\"contel\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    addressID, userId, province, city, county, detailAddr, conName, conTel\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from address\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\">\n    delete from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address (addressID, userId, province, \n      city, county, detailAddr, \n      conName, conTel)\n    values (#{addressid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, \n      #{city,jdbcType=VARCHAR}, #{county,jdbcType=VARCHAR}, #{detailaddr,jdbcType=VARCHAR}, \n      #{conname,jdbcType=VARCHAR}, #{contel,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    insert into address\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        addressID,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"province != null\">\n        province,\n      </if>\n      <if test=\"city != null\">\n        city,\n      </if>\n      <if test=\"county != null\">\n        county,\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr,\n      </if>\n      <if test=\"conname != null\">\n        conName,\n      </if>\n      <if test=\"contel != null\">\n        conTel,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        #{contel,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AddressExample\" resultType=\"java.lang.Long\">\n    select count(*) from address\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update address\n    <set>\n      <if test=\"record.addressid != null\">\n        addressID = #{record.addressid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.province != null\">\n        province = #{record.province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.city != null\">\n        city = #{record.city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.county != null\">\n        county = #{record.county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.detailaddr != null\">\n        detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.conname != null\">\n        conName = #{record.conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.contel != null\">\n        conTel = #{record.contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update address\n    set addressID = #{record.addressid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      province = #{record.province,jdbcType=VARCHAR},\n      city = #{record.city,jdbcType=VARCHAR},\n      county = #{record.county,jdbcType=VARCHAR},\n      detailAddr = #{record.detailaddr,jdbcType=VARCHAR},\n      conName = #{record.conname,jdbcType=VARCHAR},\n      conTel = #{record.contel,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"province != null\">\n        province = #{province,jdbcType=VARCHAR},\n      </if>\n      <if test=\"city != null\">\n        city = #{city,jdbcType=VARCHAR},\n      </if>\n      <if test=\"county != null\">\n        county = #{county,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailaddr != null\">\n        detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      </if>\n      <if test=\"conname != null\">\n        conName = #{conname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"contel != null\">\n        conTel = #{contel,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Address\">\n    update address\n    set userId = #{userid,jdbcType=INTEGER},\n      province = #{province,jdbcType=VARCHAR},\n      city = #{city,jdbcType=VARCHAR},\n      county = #{county,jdbcType=VARCHAR},\n      detailAddr = #{detailaddr,jdbcType=VARCHAR},\n      conName = #{conname,jdbcType=VARCHAR},\n      conTel = #{contel,jdbcType=VARCHAR}\n    where addressID = #{addressid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/AdminMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.AdminMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Admin\">\n    <id column=\"adminId\" jdbcType=\"INTEGER\" property=\"adminid\" />\n    <result column=\"adminName\" jdbcType=\"VARCHAR\" property=\"adminname\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    adminId, adminName, password\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </select>\n  <select id=\"selectByName\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\" resultMap=\"BaseResultMap\">\n    select\n    <include refid=\"Base_Column_List\" />\n    from admin\n    where adminName = #{adminname}\n    <if test=\"password != null\">\n      and password = #{password}\n    </if>\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from admin\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\">\n    delete from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin (adminId, adminName, password\n      )\n    values (#{adminid,jdbcType=INTEGER}, #{adminname,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    insert into admin\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        adminId,\n      </if>\n      <if test=\"adminname != null\">\n        adminName,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"adminid != null\">\n        #{adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"adminname != null\">\n        #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.AdminExample\" resultType=\"java.lang.Long\">\n    select count(*) from admin\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update admin\n    <set>\n      <if test=\"record.adminid != null\">\n        adminId = #{record.adminid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.adminname != null\">\n        adminName = #{record.adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update admin\n    set adminId = #{record.adminid,jdbcType=INTEGER},\n      adminName = #{record.adminname,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    <set>\n      <if test=\"adminname != null\">\n        adminName = #{adminname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Admin\">\n    update admin\n    set adminName = #{adminname,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR}\n    where adminId = #{adminid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/CategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CategoryMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Category\">\n    <id column=\"cateId\" jdbcType=\"INTEGER\" property=\"cateid\" />\n    <result column=\"cateName\" jdbcType=\"VARCHAR\" property=\"catename\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    cateId, cateName\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 8\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from category\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\">\n    delete from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category (cateId, cateName)\n    values (#{cateid,jdbcType=INTEGER}, #{catename,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    insert into category\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        cateId,\n      </if>\n      <if test=\"catename != null\">\n        cateName,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"cateid != null\">\n        #{cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catename != null\">\n        #{catename,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CategoryExample\" resultType=\"java.lang.Long\">\n    select count(*) from category\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update category\n    <set>\n      <if test=\"record.cateid != null\">\n        cateId = #{record.cateid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catename != null\">\n        cateName = #{record.catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update category\n    set cateId = #{record.cateid,jdbcType=INTEGER},\n      cateName = #{record.catename,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    <set>\n      <if test=\"catename != null\">\n        cateName = #{catename,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Category\">\n    update category\n    set cateName = #{catename,jdbcType=VARCHAR}\n    where cateId = #{cateid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/ChatMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ChatMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Chat\">\n    <id column=\"chatId\" jdbcType=\"INTEGER\" property=\"chatid\" />\n    <result column=\"sendUser\" jdbcType=\"INTEGER\" property=\"senduser\" />\n    <result column=\"receiveUser\" jdbcType=\"INTEGER\" property=\"receiveuser\" />\n    <result column=\"MsgContent\" jdbcType=\"VARCHAR\" property=\"msgcontent\" />\n    <result column=\"MsgTime\" jdbcType=\"TIMESTAMP\" property=\"msgtime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    chatId, sendUser, receiveUser, MsgContent, MsgTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from chat\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from chat\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\">\n    delete from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    insert into chat (chatId, sendUser, receiveUser, \n      MsgContent, MsgTime)\n    values (#{chatid,jdbcType=INTEGER}, #{senduser,jdbcType=INTEGER}, #{receiveuser,jdbcType=INTEGER}, \n      #{msgcontent,jdbcType=VARCHAR}, #{msgtime,jdbcType=TIMESTAMP})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    insert into chat\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"chatid != null\">\n        chatId,\n      </if>\n      <if test=\"senduser != null\">\n        sendUser,\n      </if>\n      <if test=\"receiveuser != null\">\n        receiveUser,\n      </if>\n      <if test=\"msgcontent != null\">\n        MsgContent,\n      </if>\n      <if test=\"msgtime != null\">\n        MsgTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"chatid != null\">\n        #{chatid,jdbcType=INTEGER},\n      </if>\n      <if test=\"senduser != null\">\n        #{senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"receiveuser != null\">\n        #{receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"msgcontent != null\">\n        #{msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"msgtime != null\">\n        #{msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ChatExample\" resultType=\"java.lang.Long\">\n    select count(*) from chat\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update chat\n    <set>\n      <if test=\"record.chatid != null\">\n        chatId = #{record.chatid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.senduser != null\">\n        sendUser = #{record.senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.receiveuser != null\">\n        receiveUser = #{record.receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.msgcontent != null\">\n        MsgContent = #{record.msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.msgtime != null\">\n        MsgTime = #{record.msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update chat\n    set chatId = #{record.chatid,jdbcType=INTEGER},\n      sendUser = #{record.senduser,jdbcType=INTEGER},\n      receiveUser = #{record.receiveuser,jdbcType=INTEGER},\n      MsgContent = #{record.msgcontent,jdbcType=VARCHAR},\n      MsgTime = #{record.msgtime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    update chat\n    <set>\n      <if test=\"senduser != null\">\n        sendUser = #{senduser,jdbcType=INTEGER},\n      </if>\n      <if test=\"receiveuser != null\">\n        receiveUser = #{receiveuser,jdbcType=INTEGER},\n      </if>\n      <if test=\"msgcontent != null\">\n        MsgContent = #{msgcontent,jdbcType=VARCHAR},\n      </if>\n      <if test=\"msgtime != null\">\n        MsgTime = #{msgtime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Chat\">\n    update chat\n    set sendUser = #{senduser,jdbcType=INTEGER},\n      receiveUser = #{receiveuser,jdbcType=INTEGER},\n      MsgContent = #{msgcontent,jdbcType=VARCHAR},\n      MsgTime = #{msgtime,jdbcType=TIMESTAMP}\n    where chatId = #{chatid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/CommentMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.CommentMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Comment\">\n    <id column=\"commentId\" jdbcType=\"INTEGER\" property=\"commentid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"point\" jdbcType=\"INTEGER\" property=\"point\" />\n    <result column=\"content\" jdbcType=\"VARCHAR\" property=\"content\" />\n    <result column=\"commentTime\" jdbcType=\"TIMESTAMP\" property=\"commenttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    commentId, userId, goodsId, point, content, commentTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from comment\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\">\n    delete from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment (commentId, userId, goodsId, \n      point, content, commentTime\n      )\n    values (#{commentid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{point,jdbcType=INTEGER}, #{content,jdbcType=VARCHAR}, #{commenttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    insert into comment\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        commentId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"point != null\">\n        point,\n      </if>\n      <if test=\"content != null\">\n        content,\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"commentid != null\">\n        #{commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.CommentExample\" resultType=\"java.lang.Long\">\n    select count(*) from comment\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update comment\n    <set>\n      <if test=\"record.commentid != null\">\n        commentId = #{record.commentid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.point != null\">\n        point = #{record.point,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.content != null\">\n        content = #{record.content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.commenttime != null\">\n        commentTime = #{record.commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update comment\n    set commentId = #{record.commentid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      point = #{record.point,jdbcType=INTEGER},\n      content = #{record.content,jdbcType=VARCHAR},\n      commentTime = #{record.commenttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"point != null\">\n        point = #{point,jdbcType=INTEGER},\n      </if>\n      <if test=\"content != null\">\n        content = #{content,jdbcType=VARCHAR},\n      </if>\n      <if test=\"commenttime != null\">\n        commentTime = #{commenttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Comment\">\n    update comment\n    set userId = #{userid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      point = #{point,jdbcType=INTEGER},\n      content = #{content,jdbcType=VARCHAR},\n      commentTime = #{commenttime,jdbcType=TIMESTAMP}\n    where commentId = #{commentid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/DeliverMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.DeliverMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    <id column=\"deliverId\" jdbcType=\"INTEGER\" property=\"deliverid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"sendId\" jdbcType=\"INTEGER\" property=\"sendid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    deliverId, orderId, sendId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from deliver\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from deliver\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\">\n    delete from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    insert into deliver (deliverId, orderId, sendId\n      )\n    values (#{deliverid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{sendid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    insert into deliver\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"deliverid != null\">\n        deliverId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"sendid != null\">\n        sendId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"deliverid != null\">\n        #{deliverid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"sendid != null\">\n        #{sendid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.DeliverExample\" resultType=\"java.lang.Long\">\n    select count(*) from deliver\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update deliver\n    <set>\n      <if test=\"record.deliverid != null\">\n        deliverId = #{record.deliverid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.sendid != null\">\n        sendId = #{record.sendid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update deliver\n    set deliverId = #{record.deliverid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      sendId = #{record.sendid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    update deliver\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"sendid != null\">\n        sendId = #{sendid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Deliver\">\n    update deliver\n    set orderId = #{orderid,jdbcType=INTEGER},\n      sendId = #{sendid,jdbcType=INTEGER}\n    where deliverId = #{deliverid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/FavoriteMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.FavoriteMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"collectTime\" jdbcType=\"TIMESTAMP\" property=\"collecttime\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsId, collectTime\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteKey\">\n    delete from collection\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\">\n    delete from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection (userId, goodsId, collectTime\n      )\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{collecttime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    insert into collection\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"collecttime != null\">\n        collectTime,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"collecttime != null\">\n        #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.FavoriteExample\" resultType=\"java.lang.Long\">\n    select count(*) from collection\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update collection\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.collecttime != null\">\n        collectTime = #{record.collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update collection\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      collectTime = #{record.collecttime,jdbcType=TIMESTAMP}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    <set>\n      <if test=\"collecttime != null\">\n        collectTime = #{collecttime,jdbcType=TIMESTAMP},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Favorite\">\n    update collection\n    set collectTime = #{collecttime,jdbcType=TIMESTAMP}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/GoodsMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.GoodsMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <id column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"goodsName\" jdbcType=\"VARCHAR\" property=\"goodsname\" />\n    <result column=\"price\" jdbcType=\"INTEGER\" property=\"price\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n    <result column=\"upTime\" jdbcType=\"TIMESTAMP\" property=\"uptime\" />\n    <result column=\"category\" jdbcType=\"INTEGER\" property=\"category\" />\n    <result column=\"detailCate\" jdbcType=\"VARCHAR\" property=\"detailcate\" />\n    <result column=\"activityId\" jdbcType=\"INTEGER\" property=\"activityid\" />\n  </resultMap>\n\n  <resultMap extends=\"BaseResultMap\" id=\"ResultMapWithBLOBs\" type=\"com.zhang.ssmschoolshop.entity.Goods\">\n    <result column=\"description\" jdbcType=\"LONGVARCHAR\" property=\"description\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    goodsId, goodsName, price, num, upTime, category, detailCate, activityId\n  </sql>\n  <sql id=\"Blob_Column_List\">\n    description\n  </sql>\n\n  <select id=\"selectByExampleWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n<!-- ,<include refid=\"Blob_Column_List\" />-->\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByExampleWithBLOBsLimit\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"ResultMapWithBLOBs\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n    limit 10\n  </select>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"ResultMapWithBLOBs\">\n    select \n    <include refid=\"Base_Column_List\" />\n    ,\n    <include refid=\"Blob_Column_List\" />\n    from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from goods\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\">\n    delete from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    insert into goods (goodsId, goodsName, price, \n      num, upTime, category, \n      detailCate, activityId, description\n      )\n    values (#{goodsid,jdbcType=INTEGER}, #{goodsname,jdbcType=VARCHAR}, #{price,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER}, #{uptime,jdbcType=TIMESTAMP}, #{category,jdbcType=INTEGER}, \n      #{detailcate,jdbcType=VARCHAR}, #{activityid,jdbcType=INTEGER}, #{description,jdbcType=LONGVARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\" useGeneratedKeys=\"true\" keyProperty=\"goodsid\">\n    insert into goods\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"goodsname != null\">\n        goodsName,\n      </if>\n      <if test=\"price != null\">\n        price,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n      <if test=\"uptime != null\">\n        upTime,\n      </if>\n      <if test=\"category != null\">\n        category,\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate,\n      </if>\n      <if test=\"activityid != null\">\n        activityId,\n      </if>\n      <if test=\"description != null\">\n        description,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsname != null\">\n        #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.GoodsExample\" resultType=\"java.lang.Long\">\n    select count(*) from goods\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update goods\n    <set>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsname != null\">\n        goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.price != null\">\n        price = #{record.price,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.uptime != null\">\n        upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.category != null\">\n        category = #{record.category,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.detailcate != null\">\n        detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.activityid != null\">\n        activityId = #{record.activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.description != null\">\n        description = #{record.description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExampleWithBLOBs\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER},\n      description = #{record.description,jdbcType=LONGVARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update goods\n    set goodsId = #{record.goodsid,jdbcType=INTEGER},\n      goodsName = #{record.goodsname,jdbcType=VARCHAR},\n      price = #{record.price,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER},\n      upTime = #{record.uptime,jdbcType=TIMESTAMP},\n      category = #{record.category,jdbcType=INTEGER},\n      detailCate = #{record.detailcate,jdbcType=VARCHAR},\n      activityId = #{record.activityid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    <set>\n      <if test=\"goodsname != null\">\n        goodsName = #{goodsname,jdbcType=VARCHAR},\n      </if>\n      <if test=\"price != null\">\n        price = #{price,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n      <if test=\"uptime != null\">\n        upTime = #{uptime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"category != null\">\n        category = #{category,jdbcType=INTEGER},\n      </if>\n      <if test=\"detailcate != null\">\n        detailCate = #{detailcate,jdbcType=VARCHAR},\n      </if>\n      <if test=\"activityid != null\">\n        activityId = #{activityid,jdbcType=INTEGER},\n      </if>\n      <if test=\"description != null\">\n        description = #{description,jdbcType=LONGVARCHAR},\n      </if>\n    </set>\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKeyWithBLOBs\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER},\n      description = #{description,jdbcType=LONGVARCHAR}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Goods\">\n    update goods\n    set goodsName = #{goodsname,jdbcType=VARCHAR},\n      price = #{price,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER},\n      upTime = #{uptime,jdbcType=TIMESTAMP},\n      category = #{category,jdbcType=INTEGER},\n      detailCate = #{detailcate,jdbcType=VARCHAR},\n      activityId = #{activityid,jdbcType=INTEGER}\n    where goodsId = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/ImagePathMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ImagePathMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    <id column=\"pathId\" jdbcType=\"INTEGER\" property=\"pathid\" />\n    <result column=\"goodId\" jdbcType=\"INTEGER\" property=\"goodid\" />\n    <result column=\"path\" jdbcType=\"VARCHAR\" property=\"path\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    pathId, goodId, path\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from imagepath\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\">\n    delete from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath (pathId, goodId, path\n      )\n    values (#{pathid,jdbcType=INTEGER}, #{goodid,jdbcType=INTEGER}, #{path,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    insert into imagepath\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        pathId,\n      </if>\n      <if test=\"goodid != null\">\n        goodId,\n      </if>\n      <if test=\"path != null\">\n        path,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"pathid != null\">\n        #{pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodid != null\">\n        #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        #{path,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePathExample\" resultType=\"java.lang.Long\">\n    select count(*) from imagepath\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update imagepath\n    <set>\n      <if test=\"record.pathid != null\">\n        pathId = #{record.pathid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodid != null\">\n        goodId = #{record.goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.path != null\">\n        path = #{record.path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update imagepath\n    set pathId = #{record.pathid,jdbcType=INTEGER},\n      goodId = #{record.goodid,jdbcType=INTEGER},\n      path = #{record.path,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    <set>\n      <if test=\"goodid != null\">\n        goodId = #{goodid,jdbcType=INTEGER},\n      </if>\n      <if test=\"path != null\">\n        path = #{path,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ImagePath\">\n    update imagepath\n    set goodId = #{goodid,jdbcType=INTEGER},\n      path = #{path,jdbcType=VARCHAR}\n    where pathId = #{pathid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/OrderItemMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderItemMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    <id column=\"itemId\" jdbcType=\"INTEGER\" property=\"itemid\" />\n    <result column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"goodsId\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"num\" jdbcType=\"INTEGER\" property=\"num\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    itemId, orderId, goodsId, num\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from orderitem\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\">\n    delete from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem (itemId, orderId, goodsId, \n      num)\n    values (#{itemid,jdbcType=INTEGER}, #{orderid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, \n      #{num,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    insert into orderitem\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        itemId,\n      </if>\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId,\n      </if>\n      <if test=\"num != null\">\n        num,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"itemid != null\">\n        #{itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        #{num,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItemExample\" resultType=\"java.lang.Long\">\n    select count(*) from orderitem\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update orderitem\n    <set>\n      <if test=\"record.itemid != null\">\n        itemId = #{record.itemid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsId = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.num != null\">\n        num = #{record.num,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update orderitem\n    set itemId = #{record.itemid,jdbcType=INTEGER},\n      orderId = #{record.orderid,jdbcType=INTEGER},\n      goodsId = #{record.goodsid,jdbcType=INTEGER},\n      num = #{record.num,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    <set>\n      <if test=\"orderid != null\">\n        orderId = #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        goodsId = #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"num != null\">\n        num = #{num,jdbcType=INTEGER},\n      </if>\n    </set>\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderItem\">\n    update orderitem\n    set orderId = #{orderid,jdbcType=INTEGER},\n      goodsId = #{goodsid,jdbcType=INTEGER},\n      num = #{num,jdbcType=INTEGER}\n    where itemId = #{itemid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/OrderMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.OrderMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.Order\">\n    <id column=\"orderId\" jdbcType=\"INTEGER\" property=\"orderid\" />\n    <result column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"orderTime\" jdbcType=\"TIMESTAMP\" property=\"ordertime\" />\n    <result column=\"oldPrice\" jdbcType=\"REAL\" property=\"oldprice\" />\n    <result column=\"newPrice\" jdbcType=\"REAL\" property=\"newprice\" />\n    <result column=\"isPay\" jdbcType=\"BIT\" property=\"ispay\" />\n    <result column=\"isSend\" jdbcType=\"BIT\" property=\"issend\" />\n    <result column=\"isReceive\" jdbcType=\"BIT\" property=\"isreceive\" />\n    <result column=\"isComplete\" jdbcType=\"BIT\" property=\"iscomplete\" />\n    <result column=\"addressId\" jdbcType=\"INTEGER\" property=\"addressid\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    orderId, userId, orderTime, oldPrice, newPrice, isPay, isSend, isReceive, isComplete, \n    addressId\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from indent\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\">\n    delete from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    insert into indent (orderId, userId, orderTime, \n      oldPrice, newPrice, isPay, isSend, \n      isReceive, isComplete, addressId\n      )\n    values (#{orderid,jdbcType=INTEGER}, #{userid,jdbcType=INTEGER}, #{ordertime,jdbcType=TIMESTAMP}, \n      #{oldprice,jdbcType=REAL}, #{newprice,jdbcType=REAL}, #{ispay,jdbcType=BIT}, #{issend,jdbcType=BIT}, \n      #{isreceive,jdbcType=BIT}, #{iscomplete,jdbcType=BIT}, #{addressid,jdbcType=INTEGER}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\" useGeneratedKeys=\"true\" keyProperty=\"orderid\">\n    insert into indent\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        orderId,\n      </if>\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime,\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice,\n      </if>\n      <if test=\"newprice != null\">\n        newPrice,\n      </if>\n      <if test=\"ispay != null\">\n        isPay,\n      </if>\n      <if test=\"issend != null\">\n        isSend,\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive,\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete,\n      </if>\n      <if test=\"addressid != null\">\n        addressId,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderid != null\">\n        #{orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        #{addressid,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.OrderExample\" resultType=\"java.lang.Long\">\n    select count(*) from indent\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update indent\n    <set>\n      <if test=\"record.orderid != null\">\n        orderId = #{record.orderid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.ordertime != null\">\n        orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.oldprice != null\">\n        oldPrice = #{record.oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.newprice != null\">\n        newPrice = #{record.newprice,jdbcType=REAL},\n      </if>\n      <if test=\"record.ispay != null\">\n        isPay = #{record.ispay,jdbcType=BIT},\n      </if>\n      <if test=\"record.issend != null\">\n        isSend = #{record.issend,jdbcType=BIT},\n      </if>\n      <if test=\"record.isreceive != null\">\n        isReceive = #{record.isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"record.iscomplete != null\">\n        isComplete = #{record.iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"record.addressid != null\">\n        addressId = #{record.addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update indent\n    set orderId = #{record.orderid,jdbcType=INTEGER},\n      userId = #{record.userid,jdbcType=INTEGER},\n      orderTime = #{record.ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{record.oldprice,jdbcType=REAL},\n      newPrice = #{record.newprice,jdbcType=REAL},\n      isPay = #{record.ispay,jdbcType=BIT},\n      isSend = #{record.issend,jdbcType=BIT},\n      isReceive = #{record.isreceive,jdbcType=BIT},\n      isComplete = #{record.iscomplete,jdbcType=BIT},\n      addressId = #{record.addressid,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    <set>\n      <if test=\"userid != null\">\n        userId = #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"ordertime != null\">\n        orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"oldprice != null\">\n        oldPrice = #{oldprice,jdbcType=REAL},\n      </if>\n      <if test=\"newprice != null\">\n        newPrice = #{newprice,jdbcType=REAL},\n      </if>\n      <if test=\"ispay != null\">\n        isPay = #{ispay,jdbcType=BIT},\n      </if>\n      <if test=\"issend != null\">\n        isSend = #{issend,jdbcType=BIT},\n      </if>\n      <if test=\"isreceive != null\">\n        isReceive = #{isreceive,jdbcType=BIT},\n      </if>\n      <if test=\"iscomplete != null\">\n        isComplete = #{iscomplete,jdbcType=BIT},\n      </if>\n      <if test=\"addressid != null\">\n        addressId = #{addressid,jdbcType=INTEGER},\n      </if>\n    </set>\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.Order\">\n    update indent\n    set userId = #{userid,jdbcType=INTEGER},\n      orderTime = #{ordertime,jdbcType=TIMESTAMP},\n      oldPrice = #{oldprice,jdbcType=REAL},\n      newPrice = #{newprice,jdbcType=REAL},\n      isPay = #{ispay,jdbcType=BIT},\n      isSend = #{issend,jdbcType=BIT},\n      isReceive = #{isreceive,jdbcType=BIT},\n      isComplete = #{iscomplete,jdbcType=BIT},\n      addressId = #{addressid,jdbcType=INTEGER}\n    where orderId = #{orderid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/ShopCartMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.ShopCartMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <id column=\"goodsid\" jdbcType=\"INTEGER\" property=\"goodsid\" />\n    <result column=\"cateDate\" jdbcType=\"TIMESTAMP\" property=\"catedate\" />\n    <result column=\"goodsNum\" jdbcType=\"INTEGER\" property=\"goodsnum\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, goodsid, cateDate, goodsNum\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartKey\">\n    delete from shopcart\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\">\n    delete from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart (userId, goodsid, cateDate, \n      goodsNum)\n    values (#{userid,jdbcType=INTEGER}, #{goodsid,jdbcType=INTEGER}, #{catedate,jdbcType=TIMESTAMP}, \n      #{goodsnum,jdbcType=INTEGER})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    insert into shopcart\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"goodsid != null\">\n        goodsid,\n      </if>\n      <if test=\"catedate != null\">\n        cateDate,\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"goodsid != null\">\n        #{goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"catedate != null\">\n        #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCartExample\" resultType=\"java.lang.Long\">\n    select count(*) from shopcart\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update shopcart\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.goodsid != null\">\n        goodsid = #{record.goodsid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.catedate != null\">\n        cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.goodsnum != null\">\n        goodsNum = #{record.goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update shopcart\n    set userId = #{record.userid,jdbcType=INTEGER},\n      goodsid = #{record.goodsid,jdbcType=INTEGER},\n      cateDate = #{record.catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{record.goodsnum,jdbcType=INTEGER}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    <set>\n      <if test=\"catedate != null\">\n        cateDate = #{catedate,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"goodsnum != null\">\n        goodsNum = #{goodsnum,jdbcType=INTEGER},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.ShopCart\">\n    update shopcart\n    set cateDate = #{catedate,jdbcType=TIMESTAMP},\n      goodsNum = #{goodsnum,jdbcType=INTEGER}\n    where userId = #{userid,jdbcType=INTEGER}\n      and goodsid = #{goodsid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mapper/UserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.zhang.ssmschoolshop.dao.UserMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"com.zhang.ssmschoolshop.entity.User\">\n    <id column=\"userId\" jdbcType=\"INTEGER\" property=\"userid\" />\n    <result column=\"username\" jdbcType=\"VARCHAR\" property=\"username\" />\n    <result column=\"password\" jdbcType=\"VARCHAR\" property=\"password\" />\n    <result column=\"regTime\" jdbcType=\"TIMESTAMP\" property=\"regtime\" />\n    <result column=\"email\" jdbcType=\"VARCHAR\" property=\"email\" />\n    <result column=\"telephone\" jdbcType=\"VARCHAR\" property=\"telephone\" />\n  </resultMap>\n  <sql id=\"Example_Where_Clause\">\n    <where>\n      <foreach collection=\"oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Update_By_Example_Where_Clause\">\n    <where>\n      <foreach collection=\"example.oredCriteria\" item=\"criteria\" separator=\"or\">\n        <if test=\"criteria.valid\">\n          <trim prefix=\"(\" prefixOverrides=\"and\" suffix=\")\">\n            <foreach collection=\"criteria.criteria\" item=\"criterion\">\n              <choose>\n                <when test=\"criterion.noValue\">\n                  and ${criterion.condition}\n                </when>\n                <when test=\"criterion.singleValue\">\n                  and ${criterion.condition} #{criterion.value}\n                </when>\n                <when test=\"criterion.betweenValue\">\n                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n                </when>\n                <when test=\"criterion.listValue\">\n                  and ${criterion.condition}\n                  <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n                    #{listItem}\n                  </foreach>\n                </when>\n              </choose>\n            </foreach>\n          </trim>\n        </if>\n      </foreach>\n    </where>\n  </sql>\n  <sql id=\"Base_Column_List\">\n    userId, username, password, regTime, email, telephone\n  </sql>\n  <select id=\"selectByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultMap=\"BaseResultMap\">\n    select\n    <if test=\"distinct\">\n      distinct\n    </if>\n    <include refid=\"Base_Column_List\" />\n    from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n    <if test=\"orderByClause != null\">\n      order by ${orderByClause}\n    </if>\n  </select>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from user\n    where userId = #{userid,jdbcType=INTEGER}\n  </delete>\n  <delete id=\"deleteByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\">\n    delete from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </delete>\n  <insert id=\"insert\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user (userId, username, password, \n      regTime, email, telephone\n      )\n    values (#{userid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, \n      #{regtime,jdbcType=TIMESTAMP}, #{email,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}\n      )\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    insert into user\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        userId,\n      </if>\n      <if test=\"username != null\">\n        username,\n      </if>\n      <if test=\"password != null\">\n        password,\n      </if>\n      <if test=\"regtime != null\">\n        regTime,\n      </if>\n      <if test=\"email != null\">\n        email,\n      </if>\n      <if test=\"telephone != null\">\n        telephone,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"userid != null\">\n        #{userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"username != null\">\n        #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        #{telephone,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <select id=\"countByExample\" parameterType=\"com.zhang.ssmschoolshop.entity.UserExample\" resultType=\"java.lang.Long\">\n    select count(*) from user\n    <if test=\"_parameter != null\">\n      <include refid=\"Example_Where_Clause\" />\n    </if>\n  </select>\n  <update id=\"updateByExampleSelective\" parameterType=\"map\">\n    update user\n    <set>\n      <if test=\"record.userid != null\">\n        userId = #{record.userid,jdbcType=INTEGER},\n      </if>\n      <if test=\"record.username != null\">\n        username = #{record.username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.password != null\">\n        password = #{record.password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.regtime != null\">\n        regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"record.email != null\">\n        email = #{record.email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"record.telephone != null\">\n        telephone = #{record.telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByExample\" parameterType=\"map\">\n    update user\n    set userId = #{record.userid,jdbcType=INTEGER},\n      username = #{record.username,jdbcType=VARCHAR},\n      password = #{record.password,jdbcType=VARCHAR},\n      regTime = #{record.regtime,jdbcType=TIMESTAMP},\n      email = #{record.email,jdbcType=VARCHAR},\n      telephone = #{record.telephone,jdbcType=VARCHAR}\n    <if test=\"_parameter != null\">\n      <include refid=\"Update_By_Example_Where_Clause\" />\n    </if>\n  </update>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    <set>\n      <if test=\"username != null\">\n        username = #{username,jdbcType=VARCHAR},\n      </if>\n      <if test=\"password != null\">\n        password = #{password,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regtime != null\">\n        regTime = #{regtime,jdbcType=TIMESTAMP},\n      </if>\n      <if test=\"email != null\">\n        email = #{email,jdbcType=VARCHAR},\n      </if>\n      <if test=\"telephone != null\">\n        telephone = #{telephone,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"com.zhang.ssmschoolshop.entity.User\">\n    update user\n    set username = #{username,jdbcType=VARCHAR},\n      password = #{password,jdbcType=VARCHAR},\n      regTime = #{regtime,jdbcType=TIMESTAMP},\n      email = #{email,jdbcType=VARCHAR},\n      telephone = #{telephone,jdbcType=VARCHAR}\n    where userId = #{userid,jdbcType=INTEGER}\n  </update>\n</mapper>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/mybatis-config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!DOCTYPE configuration\n        PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\"\n        \"http://mybatis.org/dtd/mybatis-3-config.dtd\">\n<configuration>\n    <settings>\n        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n    </settings>\n\n    <typeAliases>\n        <package name=\"com.zhang.ssmschoolshop.entity\" />\n    </typeAliases>\n\n    <!--分页插件-->\n    <plugins>\n        <plugin interceptor=\"com.github.pagehelper.PageInterceptor\"/>\n    </plugins>\n\n</configuration>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/classes/spring-mvc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:mvc=\"http://www.springframework.org/schema/mvc\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd\">\n\n    <!--SpringMVC的配置，包含网站跳转逻辑的控制配置-->\n    <context:component-scan base-package=\"com.zhang.ssmschoolshop\" use-default-filters=\"false\">\n        <!--只扫描控制器-->\n        <context:include-filter type=\"annotation\" expression=\"org.springframework.stereotype.Controller\"></context:include-filter>\n    </context:component-scan>\n\n    <!--配置视图解析器，方便页面返回-->\n    <bean class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\">\n        <property name=\"prefix\" value=\"/WEB-INF/views/\"></property>\n        <property name=\"suffix\" value=\".jsp\"></property>\n    </bean>\n\n    <!--两个标准配置-->\n    <!--将springmvc不能处理的请求交给tomcat-->\n    <mvc:default-servlet-handler />\n    <!--能支持springMVC的更高级的一些功能，JSP303校验，快捷的ajax。。映射动态请求-->\n    <mvc:annotation-driven />\n\n    <!-- 文件上传配置 -->\n    <bean name=\"multipartResolver\" class=\"org.springframework.web.multipart.commons.CommonsMultipartResolver\">\n        <!-- 默认编码 -->\n        <property name=\"defaultEncoding\" value=\"UTF-8\"/>\n        <!-- 上传文件大小限制为31M，31*1024*1024 -->\n        <property name=\"maxUploadSize\" value=\"32505856\"/>\n        <!-- 内存中的最大值 -->\n        <property name=\"maxInMemorySize\" value=\"4096\"/>\n    </bean>\n\n</beans>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/activity.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/27\n  Time: 15:45\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <%--<script src=\"${pageContext.request.contextPath}/js/jquery.form.min.js\"></script>--%>\n\n</head>\n<body>\n\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\" class=\"active\">所有活动</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/add\">添加活动</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>--%>\n                        <%--<li><a href=\"login.html\">。。。</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动描述<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">折扣<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">满减<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">满免<span class=\"caret\"></span></a></td>\n                            <td>删除</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"activity\" varStatus=\"num\">\n                            <tr>\n                                <td>${activity.activityid}</td>\n                                <td>${activity.activityname}</td>\n                                <td>${activity.activitydes}</td>\n                                <td>${activity.discount}</td>\n                                <c:if test=\"${!empty activity.fullprice}\">\n                                    <td>满${activity.fullprice}减${activity.reduceprice}</td>\n                                </c:if>\n                                <c:if test=\"${empty activity.fullprice}\">\n                                    <td>无满减</td>\n                                </c:if>\n\n                                <c:if test=\"${!empty activity.fullnum}\">\n                                    <td>满${activity.fullnum}免${activity.reducenum}</td>\n                                </c:if>\n                                <c:if test=\"${empty activity.fullnum}\">\n                                    <td>无满免</td>\n                                </c:if>\n                                <td><a href=\"${pageContext.request.contextPath}/admin/activity/delete?activityid=${activity.activityid}\" class=\"templatemo-delete-btn\" style=\"padding: 0;\">删除</a></td>\n                            </tr>\n                        </c:forEach>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n<!-- Templatemo Script -->\n<script>\n    $(document).ready(function () {\n        // Content widget with background image\n        var imageUrl = $('img.content-bg-img').attr('src');\n        $('.templatemo-content-img-bg').css('background-image', 'url(' + imageUrl + ')');\n        $('img.content-bg-img').hide();\n\n        /*$(\"a\").click(function () {\n            $(this).addClass(\"active\");\n        });*/\n    });\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/addActivity.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/27\n  Time: 18:19\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\">所有活动</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/activity/add\" class=\"active\">添加活动</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>--%>\n                        <%--<li><a href=\"login.html\">。。。</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <h2 class=\"margin-bottom-10\">增加活动</h2>\n                <p>活动的一些基本信息</p>\n                <form action=\"${pageContext.request.contextPath}/admin/activity/addResult\" class=\"templatemo-login-form\" method=\"post\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess\">活动名称</label>\n                            <input type=\"text\" class=\"form-control show-inpu\" id=\"inputWithSuccess\" name=\"activityname\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithDiscount\">折扣</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithDiscount\" name=\"discount\" step=\"0.01\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithFullprice\">满</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithFullprice\" name=\"fullprice\" placeholder=\"￥满减\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithReduceprice\">减</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithReduceprice\" name=\"reduceprice\" placeholder=\"￥满减\">\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithFullnum\">满</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithFullnum\" name=\"fullnum\" placeholder=\"满免\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithReducenum\">免</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithReducenum\" name=\"reducenum\" placeholder=\"满免\">\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputNote\">活动描述</label>\n                            <textarea class=\"form-control\" id=\"inputNote\" rows=\"3\" name=\"activitydes\"></textarea>\n                        </div>\n                    </div>\n\n\n                    <div class=\"form-group text-right\">\n                        <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        <button type=\"reset\" class=\"templatemo-white-button\">重置</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>        <!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/bootstrap-filestyle.min.js\"></script>  <!-- http://markusslima.github.io/bootstrap-filestyle/ -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}', '成功', 'success');\n        });\n    </script>\n</c:if>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/addCategory.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/23\n  Time: 10:02\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n   <%-- <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>--%>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/categery.js\"></script>\n\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-cate\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改分类名称</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"categoryName\" class=\"col-sm-2 control-label\">分类名</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"categoryName\" name=\"categoryName\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveCatename\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"></jsp:include>\n        <div class=\"templatemo-content-container\">\n\n            <div class=\"templatemo-content-widget white-bg\">\n                <div class=\"templatemo-content-widget no-padding\">\n                    <div class=\"panel panel-default table-responsive\">\n                        <table id=\"goodsinfo\" class=\"table  table-bordered templatemo-user-table\">\n                            <thead>\n                            <tr>\n                                <td>分类名</td>\n                                <td >编辑</td>\n                                <td >删除</td>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            <c:forEach items=\"${categoryList}\" var=\"category\">\n                                <tr>\n                                    <td><a href=\"\" class=\"templatemo-link\" cateId=\"${category.cateid}\">${category.catename}</a></td>\n                                    <td><button href=\"\" class=\"templatemo-edit-btn\" name=\"changCate\">编辑</button></td>\n                                    <td><button href=\"\" class=\"templatemo-delete-btn\" name=\"deleteCate\">删除</button></td>\n                                </tr>\n                            </c:forEach>\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n                <label class=\"control-label\" for=\"catename\">添加分类</label>\n                <form action=\"${pageContext.request.contextPath}/admin/goods/addCategoryResult\" method=\"post\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <input type=\"text\" class=\"form-control\" id=\"catename\" name=\"catename\">\n                        </div>\n                        <div class=\"col-lg-4 form-group\">\n                            <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}');\n        });\n    </script>\n</c:if>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/addGoods.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/19\n  Time: 14:55\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    \n    <%--<c:if test=\"${empty msg}\">\n        <script>\n            swal(${msg}, \"成功\",\"success\");\n        </script>\n    </c:if>--%>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"></jsp:include>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <h2 class=\"margin-bottom-10\">添加商品</h2>\n                <p>商品的一些基本信息</p>\n                <form action=\"${pageContext.request.contextPath}/admin/goods/addGoodsSuccess\" class=\"templatemo-login-form\" method=\"post\" enctype=\"multipart/form-data\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess\">商品名称</label>\n                            <input type=\"text\" class=\"form-control\" id=\"inputWithSuccess\" name=\"goodsname\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithWarning\">价格</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithWarning\" name=\"price\">\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithError\">数量</label>\n                            <input type=\"number\" class=\"form-control\" id=\"inputWithError\" name=\"num\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"inputNote\">商品描述</label>\n                            <textarea class=\"form-control\" id=\"inputNote\" rows=\"3\" name=\"description\"></textarea>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 col-md-6 form-group\">\n                            <label class=\"control-label templatemo-block\">类别</label>\n                            <select class=\"form-control\" name=\"category\">\n                                <c:forEach items=\"${categoryList}\" var=\"item\">\n                                    <option value=\"${item.cateid}\">${item.catename}</option>\n                                </c:forEach>\n                            </select>\n                        </div>\n                        <div class=\"col-lg-6 col-md-6 form-group\">\n                            <label class=\"control-label\" for=\"inputWithSuccess2\">详细类别</label>\n                            <input type=\"text\" class=\"form-control\" id=\"inputWithSuccess2\" name=\"detailcate\">\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12\">\n                            <label class=\"control-label templatemo-block\">图片</label>\n                            <!-- <input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" class=\"margin-bottom-10\"> -->\n                            <input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" class=\"filestyle\" data-buttonName=\"btn-primary\" data-buttonBefore=\"true\" data-icon=\"false\" multiple=\"multiple\">\n                            <!-- <p>Maximum upload size is 5 MB.</p>  -->\n                        </div>\n                    </div>\n                    <div class=\"form-group text-right\">\n                        <button type=\"submit\" class=\"templatemo-blue-button\">添加</button>\n                        <button type=\"reset\" class=\"templatemo-white-button\">重置</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>        <!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/bootstrap-filestyle.min.js\"></script>  <!-- http://markusslima.github.io/bootstrap-filestyle/ -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>        <!-- Templatemo Script -->\n<c:if test=\"${!empty msg}\">\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            swal('${msg}', '成功', 'success');\n        });\n    </script>\n</c:if>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/address.jsp",
    "content": "<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/25\n  Time: 15:43\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>Material Design Lite</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/address.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <script src=\"${pageContext.request.contextPath}/js/distpicker.js\"></script>\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n\n        .finish-btn{\n            background-color:#e65b0e !important;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改地址模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-addr\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\" id=\"parentModal\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改地址</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-inline mt-2 mb-4\">\n                    <div  data-toggle=\"distpicker\" data-autoselect=\"3\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\" style=\"padding-left: 28px;padding-top: 10px\">省市区</label>\n                        <select class=\"form-control\" id=\"provinceUpdate\"></select>\n                        <select class=\"form-control\" id=\"cityUpdate\"></select>\n                        <select class=\"form-control\" id=\"countyUpdate\"></select>\n                    </div>\n                </form>\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"detailaddress\" class=\"col-sm-2 control-label\">详细地址</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"detailaddress\" id=\"detailaddress\"/>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">收货人</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"name\" id=\"name\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"telephone\" id=\"telephone\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveAddr\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--添加地址模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"insert-addr\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelInsert\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\" id=\"parentModalInsert\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelInsert\">添加地址</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-inline mt-2 mb-4\">\n                    <div  data-toggle=\"distpicker\" data-autoselect=\"3\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\" style=\"padding-left: 28px;padding-top: 10px\">省市区</label>\n                        <select class=\"form-control\" id=\"provinceInsert\"></select>\n                        <select class=\"form-control\" id=\"cityInsert\"></select>\n                        <select class=\"form-control\" id=\"countyInsert\"></select>\n                    </div>\n                </form>\n                <form class=\"form-horizontal\" id=\"insert-form\" name=\"insert-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"detailaddress\" class=\"col-sm-2 control-label\">详细地址</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"detailaddressInsert\" id=\"detailaddressInsert\"/>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">收货人</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"nameInsert\" id=\"nameInsert\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"telephoneInsert\" id=\"telephoneInsert\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"insertAddr\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">收货地址</span>\n            <div class=\"mdl-layout-spacer\">\n            </div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <button class=\"templatemo-blue-button\" name=\"insertAddr\"><h5>添加地址</h5></button>\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\"></div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n<c:forEach items=\"${addressList}\" var=\"item\">\n        <div class=\"mdl-grid demo-content\" id=\"parent\">\n            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                <div class=\"tab-content\">\n                    <table class=\"table\" cellpadding=\"6\" cellspacing=\"1\" address-id=\"${item.addressid}\" id=\"table\">\n                        <thead>\n                        <th style=\"border: 0px solid transparent\">\n                            <%--<h1>个人信息</h1>--%>\n                        </th>\n                        </thead>\n                        <tbody >\n                        <tr >\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">收货人</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"conname\">${item.conname}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">手机号</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"contel\">${item.contel}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">省</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"province\">${item.province}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">市</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"city\">${item.city}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">县/区</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"county\">${item.county}</td>\n                        </tr>\n                        <tr>\n                            <th style=\"border: 0px solid transparent\" class=\"tl\">详细地址</th>\n                            <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"detailaddr\">${item.detailaddr}</td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </div>\n                <div class=\"mdl-card__actions mdl-card--border\">\n                    <button class=\"templatemo-blue-button\" name=\"changeAddr\"><h5>修改地址</h5></button>\n                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n                    <button class=\"templatemo-blue-button finish-btn\" name=\"deleteAddr\"><h5>删除地址</h5></button>\n                </div>\n            </div>\n        </div>\n</c:forEach>\n       <%-- <div class=\"mdl-grid demo-content\" >\n            <div class=\"demo-charts mdl-color--white  mdl-shadow--2dp mdl-cell mdl-cell--2-col mdl-grid\">\n                <button class=\"templatemo-blue-button\" name=\"insertAddr\"><h5>添加地址</h5></button>\n            </div>\n        </div>--%>\n    </main>\n</div>\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/admin.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"\" class=\"active\">Admin panel</a></li>\n                        <li><a href=\"\">Dashboard</a></li>\n                        <li><a href=\"\">Overview</a></li>\n                        <li><a href=\"login.html\">Sign in form</a></li>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-flex-row flex-content-row\">\n                <div class=\"templatemo-content-widget white-bg col-2\">\n                    <i class=\"fa fa-times\"></i>\n                    <div class=\"square\"></div>\n                    <h2 class=\"templatemo-inline-block\">Visual Admin Template</h2><hr>\n                    <p>Works on all major browsers. IE 10+. Visual Admin is <a href=\"http://www.templatemo.com/tag/admin\" target=\"_parent\">free responsive admin template</a> for everyone. Feel free to use this template for your backend user interfaces. Please tell your friends about <a href=\"http://www.templatemo.com\" target=\"_parent\">templatemo.com</a> website. You may <a href=\"http://www.templatemo.com/contact\" target=\"_parent\">contact us</a> if you have anything to say.</p>\n                    <p>Nunc placerat purus eu tincidunt consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur. Fusce mi lacus, semper sit amet mattis eu.</p>\n                </div>\n                <div class=\"templatemo-content-widget white-bg col-1 text-center\">\n                    <i class=\"fa fa-times\"></i>\n                    <h2 class=\"text-uppercase\">Maris</h2>\n                    <h3 class=\"text-uppercase margin-bottom-10\">Design Project</h3>\n                    <%--<img src=\"${pageContext.request.contextPath}/image/bicycle.jpg\" alt=\"Bicycle\" class=\"img-circle img-thumbnail\">--%>\n                </div>\n                <div class=\"templatemo-content-widget white-bg col-1\">\n                    <i class=\"fa fa-times\"></i>\n                    <h2 class=\"text-uppercase\">Dictum</h2>\n                    <h3 class=\"text-uppercase\">Sedvel Erat Non</h3><hr>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"></div>\n                    </div>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 50%;\"></div>\n                    </div>\n                    <div class=\"progress\">\n                        <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"templatemo-flex-row flex-content-row\">\n                <div class=\"col-1\">\n                    <div class=\"templatemo-content-widget orange-bg\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"media\">\n                            <div class=\"media-left\">\n                                <a href=\"#\">\n                                    <%--<img class=\"media-object img-circle\" src=\"images/sunset.jpg\" alt=\"Sunset\">--%>\n                                </a>\n                            </div>\n                            <div class=\"media-body\">\n                                <h2 class=\"media-heading text-uppercase\">Consectur Fusce Enim</h2>\n                                <p>Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur.</p>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"templatemo-content-widget white-bg\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"media\">\n                            <div class=\"media-left\">\n                                <a href=\"#\">\n                                    <%--<img class=\"media-object img-circle\" src=\"images/sunset.jpg\" alt=\"Sunset\">--%>\n                                </a>\n                            </div>\n                            <div class=\"media-body\">\n                                <h2 class=\"media-heading text-uppercase\">Consectur Fusce Enim</h2>\n                                <p>Phasellus dapibus nulla quis risus auctor, non placerat augue consectetur.</p>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"col-1\">\n                    <div class=\"panel panel-default templatemo-content-widget white-bg no-padding templatemo-overflow-hidden\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"panel-heading templatemo-position-relative\"><h2 class=\"text-uppercase\">User Table</h2></div>\n                        <div class=\"table-responsive\">\n                            <table class=\"table table-striped table-bordered\">\n                                <thead>\n                                <tr>\n                                    <td>No.</td>\n                                    <td>First Name</td>\n                                    <td>Last Name</td>\n                                    <td>Username</td>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                <tr>\n                                    <td>1.</td>\n                                    <td>John</td>\n                                    <td>Smith</td>\n                                    <td>@jS</td>\n                                </tr>\n                                <tr>\n                                    <td>2.</td>\n                                    <td>Bill</td>\n                                    <td>Jones</td>\n                                    <td>@bJ</td>\n                                </tr>\n                                <tr>\n                                    <td>3.</td>\n                                    <td>Mary</td>\n                                    <td>James</td>\n                                    <td>@mJ</td>\n                                </tr>\n                                <tr>\n                                    <td>4.</td>\n                                    <td>Steve</td>\n                                    <td>Bride</td>\n                                    <td>@sB</td>\n                                </tr>\n                                <tr>\n                                    <td>5.</td>\n                                    <td>Paul</td>\n                                    <td>Richard</td>\n                                    <td>@pR</td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div> <!-- Second row ends -->\n            <div class=\"templatemo-flex-row flex-content-row templatemo-overflow-hidden\"> <!-- overflow hidden for iPad mini landscape view-->\n                <div class=\"col-1 templatemo-overflow-hidden\">\n                    <div class=\"templatemo-content-widget white-bg templatemo-overflow-hidden\">\n                        <i class=\"fa fa-times\"></i>\n                        <div class=\"templatemo-flex-row flex-content-row\">\n                            <div class=\"col-1 col-lg-6 col-md-12\">\n                                <h2 class=\"text-center\">Modular<span class=\"badge\">new</span></h2>\n                                <div id=\"pie_chart_div\" class=\"templatemo-chart\"></div> <!-- Pie chart div -->\n                            </div>\n                            <div class=\"col-1 col-lg-6 col-md-12\">\n                                <h2 class=\"text-center\">Interactive<span class=\"badge\">new</span></h2>\n                                <div id=\"bar_chart_div\" class=\"templatemo-chart\"></div> <!-- Bar chart div -->\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <footer class=\"text-right\">\n                <p>Copyright &copy; 2084 Company Name\n                    | Designed by <a href=\"http://www.templatemo.com\" target=\"_parent\">templatemo</a></p>\n            </footer>\n        </div>\n    </div>\n</div>\n\n<!-- JS -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>      <!-- jQuery -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.min.js\"></script> <!--  jQuery Migrate Plugin -->\n<script src=\"https://www.google.com/jsapi\"></script> <!-- Google Chart -->\n<script>\n    /* Google Chart\n     -------------------------------------------------------------------*/\n    // Load the Visualization API and the piechart package.\n    google.load('visualization', '1.0', {'packages':['corechart']});\n\n    // Set a callback to run when the Google Visualization API is loaded.\n    google.setOnLoadCallback(drawChart);\n\n    // Callback that creates and populates a data table,\n    // instantiates the pie chart, passes in the data and\n    // draws it.\n    function drawChart() {\n\n        // Create the data table.\n        var data = new google.visualization.DataTable();\n        data.addColumn('string', 'Topping');\n        data.addColumn('number', 'Slices');\n        data.addRows([\n            ['Mushrooms', 3],\n            ['Onions', 1],\n            ['Olives', 1],\n            ['Zucchini', 1],\n            ['Pepperoni', 2]\n        ]);\n\n        // Set chart options\n        var options = {'title':'How Much Pizza I Ate Last Night'};\n\n        // Instantiate and draw our chart, passing in some options.\n        var pieChart = new google.visualization.PieChart(document.getElementById('pie_chart_div'));\n        pieChart.draw(data, options);\n\n        var barChart = new google.visualization.BarChart(document.getElementById('bar_chart_div'));\n        barChart.draw(data, options);\n    }\n\n    $(document).ready(function(){\n        if($.browser.mozilla) {\n            //refresh page on browser resize\n            // http://www.sitepoint.com/jquery-refresh-page-browser-resize/\n            $(window).bind('resize', function(e)\n            {\n                if (window.RT) clearTimeout(window.RT);\n                window.RT = setTimeout(function()\n                {\n                    this.location.reload(false); /* false to get page from cache */\n                }, 200);\n            });\n        } else {\n            $(window).resize(function(){\n                drawChart();\n            });\n        }\n    });\n\n</script>\n<script type=\"text/javascript\" src=\"js/templatemo-script.js\"></script>      <!-- Templatemo Script -->\n\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminAllGoods.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/22\n  Time: 13:07\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <%--<script src=\"${pageContext.request.contextPath}/js/jquery.form.min.js\"></script>--%>\n    <style>\n        .show-span {\n            border: none !important;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-goods\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改商品信息</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"goodsid\" class=\"col-sm-2 control-label\">id</label>\n                        <div class=\"col-sm-9\">\n                            <span id=\"goodsid\" class=\"form-control\"></span>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"goodsname\" class=\"col-sm-2 control-label\">商品名</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"goodsname\" id=\"goodsname\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"price\" class=\"col-sm-2 control-label\">价格</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"number\" class=\"form-control\" name=\"price\" id=\"price\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"num\" class=\"col-sm-2 control-label\">数量</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"number\" class=\"form-control\" id=\"num\" name=\"num\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"description\" class=\"col-sm-2 control-label\">描述</label>\n                        <div class=\"col-sm-9\">\n                            <textarea class=\"form-control\" id=\"description\" name=\"description\"></textarea>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"category\" class=\"col-sm-2 control-label\">类别</label>\n                        <div class=\"col-sm-9\">\n                            <select class=\"form-control\" id=\"category\" name=\"category\">\n                                <c:forEach items=\"${categoryList}\" var=\"item\">\n                                    <option value=\"${item.cateid}\">${item.catename}</option>\n                                </c:forEach>\n                            </select>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"detailcate\" class=\"col-sm-2 control-label\">详细分类</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"detailcate\" name=\"detailcate\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveUpdate\">保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--修改商品活动--%>\n<div class=\"modal fade\" id=\"activity-goods\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\">添加商品活动</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"templatemo-login-form\">\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <div id=\"activity-goodsid\" hidden></div>\n                            <label class=\"control-label\" for=\"activity-id\">活动号</label>\n                            <select class=\"form-control\" id=\"activity-id\">\n                                <option value=\"1\">1</option>\n                                <option value=\"1\">1</option>\n                                <option value=\"1\">1</option>\n                            </select>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"activityname\">活动名称</label>\n                            <span type=\"text\" class=\"form-control show-span\" id=\"activityname\" name=\"activityname\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"discount\">折扣</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"discount\" name=\"discount\" step=\"0.01\"></span>\n                        </div>\n                    </div>\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"fullprice\">满</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"fullprice\" name=\"fullprice\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"reduceprice\">减</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"reduceprice\" name=\"reduceprice\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"fullnum\">满</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"fullnum\" name=\"fullnum\"></span>\n                        </div>\n                        <div class=\"col-lg-6 form-group\">\n                            <label class=\"control-label\" for=\"reducenum\">免</label>\n                            <span type=\"number\" class=\"form-control show-span\" id=\"reducenum\" name=\"reducenum\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row form-group\">\n                        <div class=\"col-lg-12 form-group\">\n                            <label class=\"control-label\" for=\"activitydes\">活动描述</label>\n                            <span class=\"form-control show-span\" id=\"activitydes\" rows=\"3\" name=\"activitydes\">asfd</span>\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveActivity\">保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"goodsNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">活动<span class=\"caret\"></span></a></td>\n                            <td>详情</td>\n                            <td>编辑</td>\n                            <td>删除</td>\n                            <td>活动</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <%--<c:forEach items=\"${pageInfo.list}\" var=\"goods\" varStatus=\"num\">\n                            <tr>\n                                <td>${goods.goodsid}</td>\n                                <td>${goods.goodsname}</td>\n                                <td>${goods.price}</td>\n                                <td>${goods.num}</td>\n                                <td>${goods.detailcate}</td>\n                                <td><a href=\"\" class=\"templatemo-link\">详情</a></td>\n                                <td><button href=\"\" class=\"templatemo-edit-btn\">编辑</button></td>\n                                <td><button href=\"\" class=\"templatemo-delete-btn\">删除</button></td>\n                            </tr>\n                        </c:forEach>--%>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    <%--当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录--%>\n                </div>\n                <%--<ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/goods/show?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>--%>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- jQuery -->\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/goodsManage.js\"></script>\n<!-- Templatemo Script -->\n<script>\n    $(document).ready(function () {\n        // Content widget with background image\n        var imageUrl = $('img.content-bg-img').attr('src');\n        $('.templatemo-content-img-bg').css('background-image', 'url(' + imageUrl + ')');\n        $('img.content-bg-img').hide();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminAllOrder.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 12:57\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                    <div class=\"margin-bottom-10\">\n                                        <a href=\"${pageContext.request.contextPath}/admin/order/sendGoods?orderid=${orderInfo.orderid}\" class=\"templatemo-edit-btn pull-right\">发货</a>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n                <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                    <div class=\"page-info\" id=\"page-info-area\">\n                        当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                    </div>\n                    <ul class=\"pagination\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\">首页</span>\n                            </a>\n                        </li>\n\n                        <c:if test=\"${pageInfo.hasPreviousPage}\">\n                            <li>\n                                <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                    <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                                </a>\n                            </li>\n                        </c:if>\n\n                        <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                            <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                            </c:if>\n                            <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                            </c:if>\n                        </c:forEach>\n\n                        <c:if test=\"${pageInfo.hasNextPage}\">\n                            <li>\n                                <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                    <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                                </a>\n                            </li>\n                        </c:if>\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\">末页</span>\n                            </a>\n                        </li>\n                    </ul>\n                </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminChat.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 22:28\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>后台管理</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/mqttws31.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chat.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\"\n          href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/templatemo-style.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/adminchat.js\"></script>\n    <style>\n        .templatemo-content-widget {\n            padding: 30px 0 0 0 !important;\n        }\n        .white-bg {\n            /*background-color: #f8ffff !important;*/\n            background-color: #fbffff !important;\n        }\n        .templatemo-content-container {\n            padding: 0 !important;\n        }\n    </style>\n</head>\n<body>\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"${pageContext.request.contextPath}/admin/chat\" class=\"active\">聊天</a></li>\n                        <%--<li><a href=\"${pageContext.request.contextPath}/admin/order/receiver\">未收货</a></li>\n                        <li><a href=\"${pageContext.request.contextPath}/admin/order/complete\">已完成</a></li>--%>\n                        <%--<li><a href=\"login.html\">Sign in form</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget white-bg\">\n                <div id=\"main\">\n                    <div class=\"chat-div\">\n                        <div class=\"chat-list\">\n                            <div class=\"a-far\">\n                                <%--<c:forEach items=\"${chatuserlist}\" var=\"userinfo\">\n                                    <a class=\"a-card\" data-userid=\"${userinfo.userid}\">\n                                        <div class=\"card\">\n                                                ${userinfo.username}\n                                        </div>\n                                    </a>\n                                </c:forEach>--%>\n                            </div>\n                        </div>\n                        <div class=\"chat\">\n                            <div class=\"chat-name\">\n                                <div class=\"chat-name-detail\">\n                                    <h3 id=\"receive\">\n                                        ${sendto.username}\n                                    </h3>\n                                    <span id=\"receiveId\" hidden>${sendto.userid}</span>\n                                    <h3 id=\"send\" hidden>\n                                        客服\n                                    </h3>\n                                    <span id=\"sendId\" hidden>5</span>\n\n                                    <%--<%String clientID=request.getParameter(\"clientID\");\n                                        String toID=request.getParameter(\"toID\");\n                                    %>\n                                       <h3 id=\"receive\">\n                                           <%=toID%>\n                                       </h3>\n                                       <span id=\"receiveId\" hidden><%=toID%></span>\n                                       <h3 id=\"send\" hidden>\n                                           <%=clientID%>\n                                       </h3>\n                                       <span id=\"sendId\" hidden><%=clientID%></span>--%>\n                                </div>\n                            </div>\n                            <div class=\"chat-content\">\n                                <div class=\"chat-content-body\">\n                                    <%--<div class=\"chat-message1 chat-message\">\n                                        <div class=\"chat-message-content1\">\n                                            <span class=\"glyphicon glyphicon-triangle-left message-icon-left\" aria-hidden=\"true\"></span>\n                                            <div class=\"info-content\">\n                                                你好666\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <div class=\"clear-float\"></div>\n                                    <div class=\"chat-message2 chat-message\">\n                                        <div class=\"chat-message-content2\">\n                                            <span class=\"glyphicon glyphicon-triangle-right message-icon-right\"\n                                                  aria-hidden=\"true\"></span>\n                                            <div class=\"info-content\">\n                                                东大咸鱼太棒了！\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <div class=\"clear-float\"></div>--%>\n                                </div>\n                            </div>\n                            <div class=\"chat-input\">\n                                <div class=\"form-div\">\n                                    <div class=\"form-inline\">\n                                        <div class=\"form-group input-div\">\n\t\t\t\t\t\t\t\t<textarea class=\"form-control\" name=\"message\"\n                                          id=\"input-message\" rows=\"2\"></textarea>\n                                        </div>\n                                        <div class=\"form-group send-div\">\n                                            <input class=\"form-control btn btn-primary btn-block\"\n                                                   id=\"send-message\" type=\"submit\" value=\"发送\">\n                                            <!-- <button class=\"form-control btn-block\" id=\"send-message\">发送</button> -->\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminLogin.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/19\n  Time: 9:08\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>管理员登录</title>\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n</head>\n<body class=\"light-gray-bg\">\n<div class=\"templatemo-content-widget templatemo-login-widget white-bg\">\n    <header class=\"text-center\">\n        <div class=\"square\"></div>\n        <h1>管理员登录</h1>\n    </header>\n    <form action=\"${pageContext.request.contextPath}/admin/confirmLogin\" class=\"templatemo-login-form\" method=\"post\">\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <div class=\"input-group-addon\"><i class=\"fa fa-user fa-fw\"></i></div>\n                <input type=\"text\" class=\"form-control\" placeholder=\"用户名\" name=\"adminname\">\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <div class=\"input-group-addon\"><i class=\"fa fa-key fa-fw\"></i></div>\n                <input type=\"password\" class=\"form-control\" placeholder=\"密码\" name=\"password\">\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"checkbox squaredTwo\">\n                <input type=\"checkbox\" id=\"c1\" name=\"cc\" />\n                <%--<label for=\"c1\"><span></span>记住密码</label>--%>\n                <span class=\"error-msg\">${errorMsg}</span>\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <button type=\"submit\" class=\"templatemo-blue-button width-100\">登录</button>\n        </div>\n    </form>\n</div>\n<!-- <div class=\"templatemo-content-widget templatemo-login-widget templatemo-register-widget white-bg\">\n    <p>Not a registered user yet? <strong><a href=\"#\" class=\"blue-text\">Sign up now!</a></strong></p>\n</div> -->\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminOrderComplete.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 18:56\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminOrderNav.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 13:56\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-top-nav-container\">\n    <div class=\"row\">\n        <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n            <ul class=\"text-uppercase\">\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/send\">未发货</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/receiver\">未收货</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/order/complete\">已完成</a></li>\n                <%--<li><a href=\"login.html\">Sign in form</a></li>--%>\n            </ul>\n        </nav>\n    </div>\n</div>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/adminOrderReceive.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 18:52\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet'\n          type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- JS -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>\n    <!-- jQuery -->\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>\n    <!-- Templatemo Script -->\n    <style>\n        .head-div {\n            font-size: 18px;\n        }\n\n        .goods-table thead {\n            background-color: #fbffff;\n        }\n\n        .white-text {\n            color: #404040;\n        }\n    </style>\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"/>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <jsp:include page=\"adminOrderNav.jsp\"/>\n        <div class=\"templatemo-content-container\">\n            <%--<div class=\"templatemo-content-widget white-bg\">--%>\n            <%--<h2 class=\"margin-bottom-10\">Geo Charts</h2>--%>\n            <%--<p class=\"margin-bottom-0\">Credit goes to <a href=\"http://jqvmap.com\" target=\"_parent\">JQVMap</a>.</p>--%>\n            <%--</div>--%>\n\n            <c:forEach items=\"${pageInfo.list}\" var=\"orderInfo\">\n                <div class=\"templatemo-flex-row flex-content-row\">\n                    <div class=\"col-1\">\n                        <div class=\"panel panel-default margin-10\">\n                            <div class=\"panel-heading\"><h2>${orderInfo.address.conname}</h2></div>\n                            <div class=\"panel-body\">\n                                <div>\n                                    <div class=\"order-info margin-bottom-10\">\n                                        <div class=\"head-div\">订单信息</div>\n                                        <div>\n                                            <table id=\"orderinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">订单号<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">原价<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">实付款<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货人<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">收货地址<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系方式<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">时间<span\n                                                            class=\"caret\"></span></a></td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <tr>\n                                                    <td>${orderInfo.orderid}</td>\n                                                    <td>${orderInfo.userid}</td>\n                                                    <td>￥${orderInfo.oldprice}</td>\n                                                    <td>￥${orderInfo.newprice}</td>\n                                                    <td>${orderInfo.address.conname}</td>\n                                                    <td>${orderInfo.address.province} ${orderInfo.address.city} ${orderInfo.address.county} ${orderInfo.address.detailaddr}</td>\n                                                    <td>${orderInfo.address.contel}</td>\n                                                    <td>${orderInfo.ordertime}</td>\n                                                </tr>\n\n                                                </tbody>\n                                            </table>\n\n                                        </div>\n                                    </div>\n                                    <div class=\"goods-info margin-bottom-10\">\n                                        <div class=\"head-div\">商品信息</div>\n                                        <div>\n                                            <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table goods-table\">\n                                                <thead>\n                                                <tr>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品id<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">商品名<span class=\"caret\"></span></a>\n                                                    </td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">价格<span\n                                                            class=\"caret\"></span></a></td>\n                                                    <td><a href=\"\" class=\"white-text templatemo-sort-by\">数量<span\n                                                            class=\"caret\"></span></a></td>\n                                                        <%--<td><a href=\"\" class=\"white-text templatemo-sort-by\">类别<span--%>\n                                                        <%--class=\"caret\"></span></a></td>--%>\n                                                    <td>详情</td>\n                                                </tr>\n                                                </thead>\n                                                <tbody>\n                                                <c:forEach items=\"${orderInfo.goodsInfo}\" var=\"goods\">\n                                                    <tr>\n                                                        <td>${goods.goodsid}</td>\n                                                        <td>${goods.goodsname}</td>\n                                                        <td>￥${goods.price}</td>\n                                                        <td>${goods.num}</td>\n                                                            <%--<td>234&lt;%&ndash;${goods.detailcate}&ndash;%&gt;</td>--%>\n                                                        <td><a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\" class=\"templatemo-link\">详情</a></td>\n                                                            <%--<td>\n                                                                <button href=\"\" class=\"templatemo-edit-btn\">编辑</button>\n                                                            </td>\n                                                            <td>\n                                                                <button href=\"\" class=\"templatemo-delete-btn\">删除</button>\n                                                            </td>--%>\n                                                    </tr>\n                                                </c:forEach>\n\n                                                </tbody>\n                                            </table>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </c:forEach>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                    当前第${pageInfo.pageNum}页，总共${pageInfo.pages}页，总共${pageInfo.total}记录\n                </div>\n                <ul class=\"pagination\">\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=1\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">首页</span>\n                        </a>\n                    </li>\n\n                    <c:if test=\"${pageInfo.hasPreviousPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum - 1}\" aria-label=\"Previous\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-backward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n\n                    <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                        <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                            <li class=\"active\"><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                        <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                            <li><a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageNums}\">${pageNums}</a></li>\n                        </c:if>\n                    </c:forEach>\n\n                    <c:if test=\"${pageInfo.hasNextPage}\">\n                        <li>\n                            <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pageNum + 1}\" aria-label=\"Next\">\n                                <span aria-hidden=\"true\"><i class=\"fa fa-forward\"></i></span>\n                            </a>\n                        </li>\n                    </c:if>\n                    <li>\n                        <a href=\"${pageContext.request.contextPath}/admin/order/send?page=${pageInfo.pages}\" aria-label=\"Next\">\n                            <span aria-hidden=\"true\">末页</span>\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/category.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 19:32\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>淘一淘类别</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <style>\n        .like-button {\n            left: 80% !important;\n            top: 70% !important;\n        }\n        .data>ul {\n            padding: 0;\n        }\n        .page-div {\n            margin-top: 10px;\n        }\n        .page-info {\n            padding: 35px 35px 35px 55px;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"content\">\n        <div class=\"module\">\n            <div class=\"\">\n                <h3>\n                    类别><span style=\"color: red;\">${cate}</span>\n                </h3>\n                <hr>\n            </div>\n\n            <div class=\"bd\">\n                <div class=\"data\">\n                    <ul>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                            <li class=\"data-item-li\">\n                                <div class=\"to-big\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"${pageContext.request.contextPath}/pictures/${goods.imagePaths[0].path}\" width=\"260px\" height=\"260px\" alt=\"\"/>\n                                    </a>\n                                </div>\n                                <p class=\"text-right\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                </p>\n                                <div class=\"text-right\">\n                                    <b>￥${goods.price}</b>\n                                </div>\n                                <div>\n                                    <c:if test=\"${goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <c:if test=\"${!goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                </div>\n                            </li>\n                        </c:forEach>\n\n                        <div class=\"clear-float\" style=\"clear: both;\"></div>\n                    </ul>\n                </div>\n                <div class=\"row page-div\">\n                    <div class=\"col-md-5 page-info\">\n                        当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                    </div>\n                    <div class=\"col-md-6\">\n                        <nav aria-label=\"Page navigation\">\n                            <ul class=\"pagination pagination-lg\">\n\n                                <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                    <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                        <li class=\"active\"><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                    <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                        <li><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                </c:forEach>\n\n                                <c:if test=\"${pageInfo.hasNextPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasNextPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n                            </ul>\n                        </nav>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/chat.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/26\n  Time: 21:03\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-聊天</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/mqttws31.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chat.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\"\n          href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/send.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"chat-div\">\n        <div class=\"chat-list\">\n            <div class=\"a-far\">\n                <%--<c:forEach items=\"${chatuserlist}\" var=\"userinfo\">\n                    <a class=\"a-card\" data-userid=\"${userinfo.userid}\">\n                        <div class=\"card\">\n                            ${userinfo.username}\n                        </div>\n                    </a>\n                </c:forEach>--%>\n            </div>\n            <%--<div class=\"list-item\" id=\"list-item0\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item1\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item2\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item3\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item4\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item5\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item6\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item7\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>\n            <div class=\"list-item\" id=\"list-item8\">\n                <h3 id=\"user-name\"></h3>\n                <span id=\"user-no\"></span>\n            </div>--%>\n        </div>\n        <div class=\"chat\">\n            <div class=\"chat-name\">\n                <div class=\"chat-name-detail\">\n                    <h3 id=\"receive\">\n                        ${sendto.username}\n                    </h3>\n                    <span id=\"receiveId\" hidden>${sendto.userid}</span>\n                    <h3 id=\"send\" hidden>\n                        ${sessionScope.user.username}\n                    </h3>\n                    <span id=\"sendId\" hidden>${sessionScope.user.userid}</span>\n\n                    <%--<%String clientID=request.getParameter(\"clientID\");\n                        String toID=request.getParameter(\"toID\");\n                    %>\n                       <h3 id=\"receive\">\n                           <%=toID%>\n                       </h3>\n                       <span id=\"receiveId\" hidden><%=toID%></span>\n                       <h3 id=\"send\" hidden>\n                           <%=clientID%>\n                       </h3>\n                       <span id=\"sendId\" hidden><%=clientID%></span>--%>\n                </div>\n            </div>\n            <div class=\"chat-content\">\n                <div class=\"chat-content-body\">\n                    <%--<div class=\"chat-message1 chat-message\">\n                        <div class=\"chat-message-content1\">\n                            <span class=\"glyphicon glyphicon-triangle-left message-icon-left\" aria-hidden=\"true\"></span>\n                            <div class=\"info-content\">\n                                你好666\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"clear-float\"></div>\n                    <div class=\"chat-message2 chat-message\">\n                        <div class=\"chat-message-content2\">\n                            <span class=\"glyphicon glyphicon-triangle-right message-icon-right\"\n                                  aria-hidden=\"true\"></span>\n                            <div class=\"info-content\">\n                                东大咸鱼太棒了！\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"clear-float\"></div>--%>\n                </div>\n            </div>\n            <div class=\"chat-input\">\n                <div class=\"form-div\">\n                    <div class=\"form-inline\">\n                        <div class=\"form-group input-div\">\n\t\t\t\t\t\t\t\t<textarea class=\"form-control\" name=\"message\"\n                                          id=\"input-message\" rows=\"2\"></textarea>\n                        </div>\n                        <div class=\"form-group send-div\">\n                            <input class=\"form-control btn btn-primary btn-block\"\n                                   id=\"send-message\" type=\"submit\" value=\"发送\">\n                            <!-- <button class=\"form-control btn-block\" id=\"send-message\">发送</button> -->\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/chatrobot.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-小淘</title>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/chatrobot.css\">\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css\">\n    <!-- <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css\"> -->\n    <!-- <script src=\"https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script> -->\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/chat.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"chat-div\">\n        <div class=\"chat\">\n            <div class=\"chat-name\">\n                <div class=\"chat-name-detail\">\n                    <h3 id=\"receive\"><i>小淘</i></h3>\n                </div>\n            </div>\n            <div class=\"chat-content\">\n                <div class=\"chat-content-body\">\n                </div>\n            </div>\n            <div class=\"chat-input\">\n                <div class=\"form-div\">\n                    <div class=\"form-inline\">\n                        <div class=\"form-group input-div\">\n                            <textarea class=\"form-control\" name=\"message\" id=\"input-message\" rows=\"2\"></textarea>\n                        </div>\n                        <div class=\"form-group send-div\">\n                            <input class=\"form-control btn btn-primary btn-block\" id=\"send-message\" type=\"submit\" value=\"发送\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/detail.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!doctype html>\n<html class=\"\" lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n    <title>长理商城-${goodsInfo['goods'].goodsname}</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!-- all css here -->\n    <!-- bootstrap v3.3.6 css -->\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\">\n\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\">\n    <!-- style css -->\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/style.css\">\n\n    <link href=\"${pageContext.request.contextPath}/css/shopdetail.css\" rel=\"stylesheet\">\n    <!-- <script src=\"./detail/js/jquery.js\"></script> -->\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n\n    <%--<script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>--%>\n\n    <!-- bootstrap js -->\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/detail.js\"></script>\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n            var showproduct = {\n                \"boxid\": \"showbox\",\n                \"sumid\": \"showsum\",\n                \"boxw\": 400,\n                \"boxh\": 550,\n                \"sumw\": 60, //列表每个宽度,该版本中请把宽高填写成一样\n                \"sumh\": 60, //列表每个高度,该版本中请把宽高填写成一样\n                \"sumi\": 7, //列表间隔\n                \"sums\": 5, //列表显示个数\n                \"sumsel\": \"sel\",\n                \"sumborder\": 1, //列表边框，没有边框填写0，边框在css中修改\n                \"lastid\": \"showlast\",\n                \"nextid\": \"shownext\"\n            }; //参数定义\n            $.ljsGlasses.pcGlasses(showproduct); //方法调用，务必在加载完后执行\n\n            $(function () {\n\n                $('.tabs a').click(function () {\n\n                    var $this = $(this);\n                    $('.panel').hide();\n                    $('.tabs a.active').removeClass('active');\n                    $this.addClass('active').blur();\n                    var panel = $this.attr(\"href\");\n                    $(panel).show();\n                    return fasle; //告诉浏览器  不要纸箱这个链接\n                }); //end click\n\n\n                $(\".tabs li:first a\").click(); //web 浏览器，单击第一个标签吧\n\n            }); //end ready\n\n            $(\".centerbox li\").click(function () {\n                $(\"li\").removeClass(\"now\");\n                $(this).addClass(\"now\");\n\n            });\n\n            /*$(\"#chatto\").click(function () {\n                $.ajax({\n                    url: \"/shop/chat/\", //把表单数据发送到ajax.jsp\n                    type: \"POST\",\n                    data: {\n                        sendto: 5\n                    },\n                    error: function (request) {\n                        alert(result.msg);\n                    },\n                    success: function (result) {\n                    }\n                });\n            });*/\n\n            $('.fav-button').click(function(){\n                //$(this).removeClass(\"glyphicon-heart-empty\");\n                var goodsId = $(this).attr('data-id');\n                var isChangeBtn = true;\n                if(!$(this).children(\"i\").hasClass('fa-heart')) {\n                    //收藏\n                    $.ajax({\n                        url:\"/collect\",\n                        type:\"POST\",\n                        data:{\n                            goodsid:goodsId\n                        },\n                        success:function (result) {\n                            //收藏成功\n                            if(result.code === 200){\n                                location.href = \"/login\";\n                                isChangeBtn = false;\n                            }\n                        },\n                        error:function () {\n                            alert(\"收藏失败\");\n                        }\n                    })\n                } else {\n                    //取消收藏\n                    $.ajax({\n                        url:\"/deleteCollect\",\n                        type:\"POST\",\n                        data:{\n                            goodsid:goodsId\n                        },\n                        success:function (result) {\n                            //取消收藏成功\n                            if(result.code === 200){\n                                location.href = \"/login\";\n                                isChangeBtn = false;\n                            }\n                        },\n                        error:function () {\n                            alert(\"取消收藏失败\");\n                        }\n                    })\n                }\n\n                /*$.post(\"servlet/CollectServlet\", {\n                 goodsId: goodsId,\n                 });\n                 // alert(\"商品已加入购物车！\");*/\n\n                if(isChangeBtn) {\n                    $(this).children(\"i\").toggleClass(\"fa-heart fa-heart-o\");\n                    var likeContent = $(this).children(\"span\").text();\n                    if(likeContent == '收藏'){\n                        $(this).children(\"span\").text('取消收藏');\n                    } else {\n                        $(this).children(\"span\").text('收藏');\n                    }\n                }\n            });\n        });\n    </script>\n    <style>\n        .head{\n            width: 45px !important;\n            background: rgba(0,0,0,.0001) none repeat scroll 0 0 !important;\n            border: 1px solid rgba(0,0,0,.075) !important;\n        }\n        .span-block{\n            display: block !important;\n            padding:5px;\n        }\n    </style>\n\n</head>\n\n<body>\n<!--zoom elavator area one start-->\n<div class=\"elavator_area\">\n    <div class=\"container\">\n        <jsp:include page=\"header.jsp\"/>\n        <div class=\"shop_menu shop_menu_2 main-detail-div\">\n            <ul class=\"cramb_area cramb_area_5 main-detail-nav\">\n                <li><a href=\"index.html\">首页 /</a></li>\n                <%--<li><a href=\"index.html\">Shop /</a></li>\n                <li><a href=\"index.html\">Headlight/</a></li>\n                <li><a href=\"index.html\">Hats /</a></li>--%>\n                <li class=\"br-active\">${goodsInfo['goods'].goodsname}</li>\n            </ul>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-lg-5 col-md-5 col-sm-12 col-xs-12\">\n                <div class=\"shopdetails\">\n                    <div id=\"leftbox\">\n                        <div id=\"showbox\">\n                            <c:forEach items=\"${goodsInfo['image']}\" var=\"path\">\n                                <img src=\"/pictures/${path.path}\" width=\"400\" height=\"400\"/>\n                            </c:forEach>\n                        </div>\n                        <div id=\"showsum\">\n                        </div>\n                        <p class=\"showpage\">\n                            <a href=\"javascript:void(0);\" id=\"showlast\"> < </a>\n                            <a href=\"javascript:void(0);\" id=\"shownext\"> > </a>\n                        </p>\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-lg-6 col-md-6 col-sm-12 col-xs-12\">\n                <div class=\"elav_titel\">\n                    <div class=\"elv_heading\">\n                        <h3>${goodsInfo['goods'].goodsname}</h3>\n                    </div>\n                    <div class=\"price_rating\">\n                        <%--<a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a href=\"#\">\n                            <i class=\"fa fa-star\"></i>\n                        </a>\n                        <a class=\"not-rated\" href=\"#\">\n                            <i class=\"fa fa-star-o\"></i>\n                        </a>\n                        <a class=\"review-link\" href=\"#\">\n                            (\n                            <span class=\"count\">2</span>\n                            customer reviews)\n                        </a>--%>\n                    </div>\n                    <!-- <div class=\"evavet_description\">\n                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce posuere metus vitae arcu imperdiet, id aliquet ante scelerisque. Sed sit amet sem vitae urna fringilla tempus.</p>\n                    </div> -->\n                </div>\n                <div class=\"elav_info\">\n                    <!-- 价格 -->\n                    <div class=\"price_box price_box_acr new_meta\">\n                        <%--<span class=\"old- price old- price-2\">$250.00</span>--%>\n                        <span class=\"spical-price spical-price-2\">￥${goodsInfo['goods'].price}</span>\n                    </div>\n                    <div class=\"new_meta\">\n                            <span class=\"sku_wrapper big-font\">\n                                类别:\n                                <span class=\"sku\">${goodsInfo['cate'].catename}</span>\n                            </span>\n                        <span class=\"sku_wrapper big-font\">\n                                数量:\n                                <span class=\"sku\">${goodsInfo['goods'].num}</span>\n                            </span>\n                    </div>\n\n                    <div class=\"new_meta\">\n                            <span class=\"sku_wrapper big-font\">\n                                优惠:\n                                <c:if test=\"${goodsInfo['goods'].activityid != 1}\">\n                                    <span class=\"sku\">${goodsInfo['goods'].activity.activityname}</span>\n                                    <span class=\"span-block\">${goodsInfo['goods'].activity.activitydes}</span>\n                                    <span class=\"span-block\">折扣:${goodsInfo['goods'].activity.discount}</span>\n                                    <c:if test=\"${!empty goodsInfo['goods'].activity.fullprice}\">\n                                        <span class=\"span-block\">\n                                            满${goodsInfo['goods'].activity.fullprice}减${goodsInfo['goods'].activity.reduceprice}\n                                        </span>\n                                    </c:if>\n                                    <c:if test=\"${!empty goodsInfo['goods'].activity.fullnum}\">\n                                        <span class=\"span-block\">\n                                            满${goodsInfo['goods'].activity.fullnum}免${goodsInfo['goods'].activity.reducenum}\n                                        </span>\n                                    </c:if>\n                                </c:if>\n                                <c:if test=\"${goodsInfo['goods'].activityid == 1}\">\n                                    <span class=\"sku\">暂无优惠，敬请期待！</span>\n                                </c:if>\n                            </span>\n                    </div>\n                    <%--<div class=\"new_meta\"></div>--%>\n\n                    <div class=\"rel-div\">\n                        <div class=\"add_defi new_meta\">\n                            <a id=\"chatto\" href=\"${pageContext.request.contextPath}/chat?sendto=5\" data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\" big-font\">\n                                <i class=\"fa fa-commenting\"></i>\n                                联系客服\n                            </a>\n                        </div>\n                        <form class=\"cart-btn-area new_meta\" action=\"${pageContext.request.contextPath}/addCart\" method=\"post\">\n                            <input type=\"hidden\" value=\"${goodsInfo['goods'].goodsid}\" name=\"goodsid\"/>\n                            <input type=\"number\" value=\"1\" name=\"goodsnum\">\n                            <button class=\"add-tocart cart_zpf\" type=\"submit\">加入购物车</button>\n                        </form>\n                        <div class=\"add_defi new_meta\">\n                            <a data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\"fav-button big-font\" data-id=\"${goodsInfo['goods'].goodsid}\">\n                                <c:if test=\"${goodsInfo['goods'].fav}\">\n                                    <i class=\"fa fa-heart\"></i>\n                                    取消收藏\n                                </c:if>\n                                <c:if test=\"${!goodsInfo['goods'].fav}\">\n                                    <i class=\"fa fa-heart-o\"></i>\n                                    <span class=\"like-content\">收藏</span>\n                                </c:if>\n                            </a>\n                        </div>\n                    </div>\n\n                    <!-- <div class=\"add_defi_2\">\n                        <a data-original-title=\"Compare\" title=\"\" data-toggle=\"tooltip\" rel=\"nofollow\" data-product_id=\"45\" href=\"\"><i class=\"fa fa-refresh another_icon\"></i> Compare</a>\n                    </div> -->\n\n                </div>\n            </div>\n            <!-- <div class=\"col-lg-4 col-md-4 col-sm-12 col-xs-12\">\n\n        </div> -->\n        </div>\n    </div>\n</div>\n<!--zoom elavator area one end-->\n<!--tab area start-->\n<div class=\"tab_area_start\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12 col-sm-12 col-xs-12 text-right\">\n                <div class=\"my-tabs\">\n                    <!-- Nav tabs -->\n                    <ul class=\"favtabs favtabs-2 favtabs-nytr\" role=\"tablist\">\n                        <%--<li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\">Discription</a></li>--%>\n                        <li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\"\n                                                                  data-toggle=\"tab\">商品描述</a></li>\n                        <li role=\"presentation\"><a href=\"#profile\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">评价\n                            (${commentList.size()})</a></li>\n                    </ul>\n                    <!-- Tab panes -->\n                    <div class=\"tab-content\">\n                        <div role=\"tabpanel\" class=\"tab-pane active\" id=\"home\">\n                            <div class=\"row\">\n                                <div class=\"col-md-12 col-xs-12\">\n                                    <div class=\"tb_desc\">\n                                        <h2>商品描述</h2>\n                                        <p>${goodsInfo['goods'].description}</p>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div role=\"tabpanel\" class=\"tab-pane\" id=\"profile\">\n                            <div class=\"row\">\n                                <div class=\"col-md-12 col-xs-12\">\n                                    <div class=\"tb_desc\">\n                                        <div class=\"review_area_heading\">\n                                            <div id=\"comnt\">\n                                                <h2>${commentList.size()}条评论</h2>\n                                                <ol class=\"commentlist\">\n                                                    <c:forEach items=\"${commentList}\" var=\"comment\">\n                                                        <li id=\"li-comment-22\" class=\"comment even thread-even depth-1\"\n                                                            itemscope=\"\">\n                                                            <div id=\"comment-22\" class=\"comment_container\">\n                                                                <img class=\"head avatar avatar-60 photo \"width=\"60\" height=\"60\"\n                                                                     src=\"${pageContext.request.contextPath}/image/head.jpg\" alt=\"\">\n                                                                <div class=\"comment-text\">\n                                                                    <div class=\"star-rating\" title=\"Rated ${comment.point} out of 5\"\n                                                                         itemscope=\"\">\n                                                                        <div class=\"price_rating price_rating_2\">\n                                                                          <c:forEach  begin=\"1\" end=\"${comment.point}\">\n                                                                              <a href=\"#\">\n                                                                                  <i class=\"fa fa-star\"></i>\n                                                                              </a>\n                                                                          </c:forEach>\n                                                                            <c:forEach begin=\"${comment.point+1}\" end=\"5\">\n                                                                                <a class=\"not-rated\" href=\"#\">\n                                                                                    <i class=\"fa fa-star-o\"\n                                                                                       aria-hidden=\"true\"></i>\n                                                                                </a>\n                                                                            </c:forEach>\n                                                                            <span>\n                                                                                <strong>${comment.point}</strong>\n                                                                                out of ${5-comment.point}\n                                                                            </span>\n                                                                        </div>\n                                                                    </div>\n                                                                    <p class=\"meta\">\n                                                                        <strong>${comment.username}</strong>\n                                                                        –\n                                                                        <time datetime=\"${comment.commenttime}\">\n                                                                            ${comment.commenttime.year+1900}年\n                                                                            ${comment.commenttime.month+1}月\n                                                                            ${comment.commenttime.date}日\n                                                                        </time>\n                                                                        :\n                                                                        <a  href=\"${pageContext.request.contextPath}/chat?sendto=${comment.userid}\" data-original-title=\"Add to Wishlist\" data-toggle=\"tooltip\" class=\" big-font\">\n                                                                            <i class=\"fa fa-commenting\"></i>\n                                                                        </a>\n                                                                    </p>\n                                                                    <div class=\"description\">\n                                                                        <p>${comment.content}</p>\n                                                                    </div>\n                                                                </div>\n                                                            </div>\n                                                        </li>\n                                                    </c:forEach>\n                                                </ol>\n                                            </div>\n                                            <%--<div class=\"review_form_area\">\n                                                <div class=\"review_form\">\n                                                    <div class=\"revew_form_content\">\n                                                        <h3 id=\"reply-title\" class=\"comment-reply-title\">\n                                                            Add a review\n                                                            <small>\n                                                                <a id=\"cancel-comment-reply-link\" style=\"display:none;\" href=\"#\" rel=\"nofollow\">Cancel reply</a>\n                                                            </small>\n                                                        </h3>\n                                                        <form id=\"commentform\" class=\"comment-form\" method=\"post\" action=\"form\">\n                                                            <div class=\"comment-form-rating\">\n                                                                <label class=\"comment\">Your Rating</label>\n                                                                <div class=\"price_rating price_rating_2 price_rating_3\">\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                    <a href=\"#\">\n                                                                        <i class=\"fa fa-star-o\"></i>\n                                                                    </a>\n                                                                </div>\n                                                            </div>\n                                                            <div class=\"comment-form-comment\">\n                                                                <label class=\"comment\">Your Review</label>\n                                                                <textarea id=\"comment\" aria-required=\"true\" rows=\"8\" cols=\"45\" name=\"comment\"></textarea>\n                                                            </div>\n                                                            <div class=\"comment-form-author\">\n                                                                <label class=\"comment\">\n                                                                    Name\n                                                                    <span class=\"required required_menu\">*</span>\n                                                                </label>\n                                                                <input id=\"author\" class=\"mix_type\" type=\"text\" aria-required=\"true\" size=\"30\" value=\"\" name=\"author\">\n                                                            </div>\n                                                            <div class=\"comment-form-email\">\n                                                                <label class=\"comment\">\n                                                                    Email\n                                                                    <span class=\"required required_menu\">*</span>\n                                                                </label>\n                                                                <input id=\"email\" class=\"mix_type\" type=\"text\" aria-required=\"true\" size=\"30\" value=\"\" name=\"email\">\n                                                            </div>\n                                                            <div class=\"form-submit\">\n                                                                <input id=\"sub\" class=\"submt\" type=\"submit\" value=\"Submit\" name=\"submit\">\n                                                            </div>\n                                                        </form>\n                                                    </div>\n                                                </div>\n                                            </div>--%>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!--tab area end-->\n<!-- jquery latest version -->\n<!-- <script src=\"js/vendor/jquery-1.12.0.min.js\"></script> -->\n<!-- bootstrap js -->\n<!-- <script src=\"js/bootstrap.min.js\"></script> -->\n\n</body>\n</html>\n\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/favorite.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!doctype html>\n\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息-收藏</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/information.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n        .content{\n            margin: 23px 1px;\n        }\n        .page-info {\n            padding: 30px 30px 30px 50px;\n        }\n        .like-button{\n            left: 75% !important;\n            top: 65% !important;\n        }\n    </style>\n    <script>\n        $(document).ready(function () {\n            $(\".data-item-li\").hover(function(){\n                //需处理显示哪个按钮\n                // $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n                $(this).find(\".like-button\").show();\n            },function(){\n                $(this).find(\".like-button\").hide();\n            });\n            $(\".like-button\").click(function () {\n                var goodsId = $(this).attr(\"data-id\");\n                //取消收藏\n                $.ajax({\n                    url:\"/deleteCollect\",\n                    type:\"POST\",\n                    data:{\n                        goodsid:goodsId\n                    },\n                    success:function (result) {\n                        //取消收藏成功\n                        if(result.code === 100){\n                            location.reload();\n                        }\n                    },\n                    error:function () {\n                        alert(\"取消收藏失败\");\n                    }\n                });\n            });\n        });\n    </script>\n</head>\n<body>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">我的收藏</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <div class=\"mdl-layout-spacer\"></div>\n\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n        <div class=\"mdl-grid demo-content\">\n            <div class=\"content\">\n                <div class=\"module\">\n                    <div class=\"bd\">\n                        <div class=\"data\">\n                            <ul>\n                                <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                                    <li class=\"data-item-li\">\n                                        <div class=\"to-big\">\n                                            <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"/pictures/${goods.imagePaths[0].path}\" width=\"240px\" height=\"240px\" alt=\"\"/>\n                                            </a>\n                                        </div>\n                                        <p class=\"text-right\">\n                                            <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                        </p>\n                                        <div class=\"text-right\">\n                                            <b>￥${goods.price}</b>\n                                        </div>\n                                        <div>\n                                            <c:if test=\"${goods.fav}\">\n                                                <button\n                                                        class=\"like-button glyphicon glyphicon-trash btn btn-default\"\n                                                        data-id=\"${goods.goodsid}\"\n                                                        style=\"display: none;\"></button>\n                                            </c:if>\n\n                                            <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                        </div>\n                                    </li>\n                                </c:forEach>\n\n                                <div class=\"clear-float\" style=\"clear: both;\"></div>\n                            </ul>\n                        </div>\n                        <div class=\"row page-div\">\n                            <div class=\"col-md-5 page-info\">\n                                当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                            </div>\n                            <div class=\"col-md-6\">\n                                <nav aria-label=\"Page navigation\">\n                                    <ul class=\"pagination pagination-lg\">\n\n                                        <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                            <li>\n                                                <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                                    <span aria-hidden=\"true\">&laquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                            <li class=\"disabled\">\n                                                <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                                    <span aria-hidden=\"true\">&laquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                            <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                                <li class=\"active\"><a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageNums}\">${pageNums}</a></li>\n                                            </c:if>\n                                            <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                                <li><a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageNums}\">${pageNums}</a></li>\n                                            </c:if>\n                                        </c:forEach>\n\n                                        <c:if test=\"${pageInfo.hasNextPage}\">\n                                            <li>\n                                                <a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                                    <span aria-hidden=\"true\">&raquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                        <c:if test=\"${!pageInfo.hasNextPage}\">\n                                            <li class=\"disabled\">\n                                                <a href=\"${pageContext.request.contextPath}/info/favorite?page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                                    <span aria-hidden=\"true\">&raquo;</span>\n                                                </a>\n                                            </li>\n                                        </c:if>\n\n                                    </ul>\n                                </nav>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </main>\n</div>\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/frontChat.jsp",
    "content": "\n<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\n         pageEncoding=\"UTF-8\"%>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <title>Insert title here</title>\n    <script type=\"text/javascript\" src=\"<%=request.getContextPath()%>/js/jquery.js\"></script>\n    <script type=\"text/javascript\" src=\"<%=request.getContextPath()%>/js/mqttws31.js\"></script>\n    <script type=\"text/javascript\">\n        var client;\n        var clientID;\n        $(window).on('beforeunload',function(){\n            client=null;\n            window.opener.document.getElementById(\"flag\").value=\"0\";\n        });\n        $(function($) {\n            //$('#con').bind('click',function(){\n            clientID=$('#clientID').val();\n            client = new Messaging.Client('127.0.0.1',61614,clientID);\n            client.onConnectionLost = function(){\n                $('#message').append('连接已断开');\n            };\n            //收到消息\n            client.onMessageArrived = function(message){\n                var msgObj=jQuery.parseJSON(message.payloadString);\n                $('#toID').val(msgObj.from);\n                debugger\n                if (msgObj.to===clientID){\n                    debugger;\n                    $('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");\n                }\n            };\n            //建立连接和订阅\n            client.connect({onSuccess:function(){\n                $('#message').append('连接成功,可以聊天了！'+\"</br>\");\n                //订阅topic\n                client.subscribe(\"topic\");\n\n            }});\n            //});\n            $('#sendBtn').bind('click',function(){\n                clientID=$('#clientID').val();\n                var msg={};\n                msg.from=clientID;\n                msg.to=$('#toID').val();\n                msg.body=$('#sendMsg').val();\n                message = new Messaging.Message(JSON.stringify(msg));\n                message.destinationName = \"topic\";\n                client.send(message);\n                $('#message').append(msg.from+\":\"+msg.body+\"</br>\");\n            });\n\n        });\n    </script>\n</head>\n<body>\n<%String clientID=request.getParameter(\"clientID\");\n    String toID=request.getParameter(\"toID\");\n%>\n<div id=\"message\"></div><br>\n<input type=\"hidden\" id=\"clientID\" value=\"<%=clientID%>\">\n<input type=\"hidden\" id=\"toID\" value=\"<%=toID%>\">\n<textarea id=\"sendMsg\" rows=\"3\" cols=\"50\">请输入信息</textarea>\n<button id='sendBtn'>发送</button>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/goodsNav.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-top-nav-container\">\n    <div class=\"row\">\n        <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n            <ul class=\"text-uppercase\">\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/show\">所有商品</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/add\">添加商品</a></li>\n                <li><a href=\"${pageContext.request.contextPath}/admin/goods/addCategory\">添加分类</a></li>\n                <%--<li><a href=\"login.html\">。。。</a></li>--%>\n            </ul>\n        </nav>\n    </div>\n</div>\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/header.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\">\n<div class=\"row\">\n    <div class=\"col-md-4\" role=\"navigation\">\n\n        <ul class=\"nav nav-pills\">\n            <c:if test=\"${empty sessionScope.user}\">\n                <li><a href=\"${pageContext.request.contextPath}/login\" style=\"color: #F22E00\">请登录</a></li>\n            </c:if>\n            <c:if test=\"${!empty sessionScope.user}\">\n                <li class=\"info-a\">\n                    <a href=\"${pageContext.request.contextPath}/information\" style=\"color: #F22E00\">\n                        ${sessionScope.user.username}\n                    <span class=\"glyphicon glyphicon-triangle-bottom\" style=\"font-size: 5px;margin-left: 7px;\" aria-hidden=\"true\">\n                    </span>\n                    </a>\n                    <ul class=\"dropdown-menu\">\n                        <li><a href=\"${pageContext.request.contextPath}/information\">账户管理</a></li>\n                        <li role=\"separator\" class=\"divider\"></li>\n                        <li><a href=\"${pageContext.request.contextPath}/logout\" class=\"login-out\">退出登录</a></li>\n                    </ul>\n                </li>\n            </c:if>\n\n            <li><a href=\"${pageContext.request.contextPath}/register\">注册</a></li>\n        </ul>\n    </div>\n    <div class=\"col-md-8\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li><a href=\"${pageContext.request.contextPath}/chat\"> <i\n                    class=\"fa fa-comment\"></i> 消息\n            </a></li>\n            <li><a href=\"${pageContext.request.contextPath}/showcart\"> <i\n                    class=\"fa fa-shopping-cart\" style=\"color: #F22E00\"></i>\n                购物车\n            </a></li>\n            <li><a href=\"${pageContext.request.contextPath}/info/favorite\"> <i\n                    class=\"fa fa-star\"></i> 收藏夹\n            </a></li>\n        </ul>\n    </div>\n</div>\n<div id=\"header-nav\">\n    <nav class=\"navbar navbar-default\" id=\"header-nav-middle\">\n        <div class=\"container-fluid\">\n            <!-- Brand and toggle get grouped for better mobile display -->\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle collapsed\"\n                        data-toggle=\"collapse\"\n                        data-target=\"#bs-example-navbar-collapse-1\"\n                        aria-expanded=\"false\">\n                    <span class=\"sr-only\">Toggle navigation</span> <span\n                        class=\"icon-bar\"></span> <span class=\"icon-bar\"></span> <span\n                        class=\"icon-bar\"></span>\n                </button>\n                <a class=\"navbar-brand\" href=\"${pageContext.request.contextPath}/main\"><!-- <img alt=\"Brand\" style=\"display: inline-block;\" src=\"./image/tao.jpg\" width=\"20\" height=\"20\"> --><span class=\"logo-word\">长理商城</span></a>\n            </div>\n\n            <!-- Collect the nav links, forms, and other content for toggling -->\n            <div class=\"collapse navbar-collapse\"\n                 id=\"bs-example-navbar-collapse-1\">\n                <ul class=\"nav navbar-nav\">\n                    <li><a class=\"a-color\" href=\"${pageContext.request.contextPath}/main\">首页</a></li>\n                    <li><a class=\"a-color\" href=\"${pageContext.request.contextPath}/information\">个人信息</a></li>\n                    <li class=\"dropdown\"><a class=\"a-color\" href=\"${pageContext.request.contextPath}/info/list\"\n                                            class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\"\n                                            aria-haspopup=\"true\" aria-expanded=\"false\">我的订单 <span\n                            class=\"caret\"></span></a>\n                        <ul class=\"dropdown-menu\">\n                            <li><a href=\"${pageContext.request.contextPath}/info/address\">地址管理</a></li>\n                            <li><a href=\"${pageContext.request.contextPath}/order\">交易中</a></li>\n                            <li role=\"separator\" class=\"divider\"></li>\n                            <li><a href=\"${pageContext.request.contextPath}/chatrobot\">小淘</a></li>\n                        </ul></li>\n                </ul>\n\n                <form class=\"navbar-form navbar-right\" role=\"search\" method=\"get\" action=\"${pageContext.request.contextPath}/search\">\n                    <div class=\"form-group\">\n                        <input type=\"text\" class=\"form-control\" placeholder=\"Search\" name=\"keyword\">\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-default\">\n                        <span class=\"glyphicon glyphicon-search\" aria-label=\"搜索\"></span>\n                    </button>\n                </form>\n            </div>\n            <!-- /.navbar-collapse -->\n        </div>\n        <!-- /.container-fluid -->\n    </nav>\n</div>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/information.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!doctype html>\n<!--\nMaterial Design Lite\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License\n-->\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/information.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-info\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabel\">修改个人信息</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"update-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\">昵称</label>\n                        <div class=\"col-sm-9\">\n                            <div  name=\"name\" id=\"name\"></div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"email\" class=\"col-sm-2 control-label\">邮箱</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" name=\"email\" id=\"email\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"telephone\" class=\"col-sm-2 control-label\">手机号</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"text\" class=\"form-control\" id=\"telephone\" name=\"telephone\">\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveInfo\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"update-Psw\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelPsw\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelPsw\">修改密码</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"updatePsw-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"oldPsw\" class=\"col-sm-2 control-label\">旧密码</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"password\" class=\"form-control\" name=\"oldPsw\" id=\"oldPsw\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\" style=\"display: none\" id=\"oldPswError\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\"></label>\n                        <div class=\"col-sm-9\">\n                            <label style=\"color: #BD1F3B\">密码错误</label>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"newPsw\" class=\"col-sm-2 control-label\">新密码</label>\n                        <div class=\"col-sm-9\">\n                            <input type=\"password\" class=\"form-control\" name=\"newPsw\" id=\"newPsw\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\" style=\"display: none\" id=\"newPswError\">\n                        <label for=\"name\" class=\"col-sm-2 control-label\"></label>\n                        <div class=\"col-sm-9\">\n                            <label style=\"color: #BD1F3B\">密码应长度大于8</label>\n                        </div>\n                    </div>\n\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"savePsw\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">个人信息</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n               <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                    <i class=\"material-icons\">search</i>\n                </label>\n                <div class=\"mdl-textfield__expandable-holder\">\n                    <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                    <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                </div>--%>\n            </div>\n           <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                <i class=\"material-icons\">more_vert</i>\n            </button>\n            <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                <li class=\"mdl-menu__item\">About</li>\n                <li class=\"mdl-menu__item\">Contact</li>\n                <li class=\"mdl-menu__item\">Legal information</li>\n            </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n           <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n               <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\">\n                </div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n        <div class=\"mdl-grid demo-content\">\n            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                <div class=\"tab-content\">\n                        <table class=\"table\" cellpadding=\"6\" cellspacing=\"1\">\n                            <thead>\n                            <th style=\"border: 0px solid transparent\">\n                                <%--<h1>个人信息</h1>--%>\n                            </th>\n                            </thead>\n                            <tbody >\n                            <tr >\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">用户号</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"userIdVal\">${user.getUserid()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">用户名</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"nameVal\">${user.getUsername()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">注册时间</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"regTimeVal\">\n                                    ${user.regtime.year+1900} 年\n                                    ${user.regtime.month+1} 月\n                                    ${user.regtime.date} 日\n                                </td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">邮箱</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"emailVal\">${user.getEmail()}</td>\n                            </tr>\n                            <tr>\n                                <th style=\"border: 0px solid transparent\" class=\"tl\">手机号</th>\n                                <td style=\"border: 0px solid transparent\" class=\"tr\" id=\"telephoneVal\">${user.getTelephone()}</td>\n                            </tr>\n                            <i Psw=\"${user.getPassword()}\" id=\"Psw\"></i>\n                            </tbody>\n                        </table>\n                    </div>\n                <div class=\"mdl-card__actions mdl-card--border\">\n                    <button class=\"templatemo-blue-button\" id=\"changeInfo\"><h5>修改信息</h5></button>\n                    <button class=\"templatemo-blue-button\" id=\"changePsw\"><h5>修改密码</h5></button>\n                </div>\n            </div>\n        </div>\n    </main>\n</div>\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/list.jsp",
    "content": "<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/26\n  Time: 10:16\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"A front-end template that helps you build fast, modern mobile web apps.\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n    <title>个人信息-我的订单</title>\n\n    <!-- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"icon\" sizes=\"192x192\" href=\"images/android-desktop.png\">\n\n    <!-- Add to homescreen for Safari on iOS -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"Material Design Lite\">\n    <link rel=\"apple-touch-icon-precomposed\" href=\"images/ios-desktop.png\">\n\n    <!-- Tile icon for Win8 (144x144 + tile color) -->\n    <meta name=\"msapplication-TileImage\" content=\"images/touch/ms-touch-icon-144x144-precomposed.png\">\n    <meta name=\"msapplication-TileColor\" content=\"#3372DF\">\n\n    <link rel=\"shortcut icon\" href=\"images/favicon.png\">\n\n    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->\n    <!--\n    <link rel=\"canonical\" href=\"http://www.example.com/\">\n    -->\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\">\n    <link rel=\"stylesheet\" href=\"https://code.getmdl.io/1.3.0/material.cyan-light_blue.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/infostyle.css\">\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/list.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <script src=\"${pageContext.request.contextPath}/js/distpicker.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.raty.js\"></script>\n    <style>\n        #view-source {\n            position: fixed;\n            display: block;\n            right: 0;\n            bottom: 0;\n            margin-right: 40px;\n            margin-bottom: 40px;\n            z-index: 900;\n        }\n\n        .templatemo-blue-button {\n            background-color: #39ADB4;\n            border: none;\n            color: white;\n        }\n\n        .no-border{border: 0px solid transparent !important;}\n\n        .bs-example {\n            position: relative;\n            padding: 45px 15px 15px;\n            margin: 0 -15px 15px;\n            border-color: #e5e5e5 #eee #eee;\n            border-style: solid;\n            border-width: 1px 0;\n            -webkit-box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n            box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n        }\n\n        .finish-btn{\n            background-color:#e65b0e !important;\n        }\n\n        .font-color{\n            color: #00BBD6; !important;\n        }\n\n\n    </style>\n</head>\n<body>\n\n<%--修改商品信息模态框--%>\n<!-- Modal -->\n<div class=\"modal fade\" id=\"evaluate\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabelPsw\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"myModalLabelPsw\">商品评价</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"form-horizontal\" id=\"updatePsw-form\" name=\"update-form\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label for=\"star\" class=\"col-sm-2 control-label\">商品评分</label>\n                        <div class=\"col-sm-9\">\n                            <div id=\"star\" data-num=\"3.5\"></div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"description\" class=\"col-sm-2 control-label\">详细描述</label>\n                        <div class=\"col-sm-9\">\n                            <textarea class=\"form-control\" rows=\"3\" id=\"description\"></textarea>\n                        </div>\n                    </div>\n\n\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">取消</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"saveEvaluate\" >保存</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header\">\n    <header class=\"demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600\">\n        <div class=\"mdl-layout__header-row\">\n            <span class=\"mdl-layout-title\">订单管理</span>\n            <div class=\"mdl-layout-spacer\"></div>\n            <div class=\"mdl-textfield mdl-js-textfield mdl-textfield--expandable\">\n                <%-- <label class=\"mdl-button mdl-js-button mdl-button--icon\" for=\"search\">\n                     <i class=\"material-icons\">search</i>\n                 </label>\n                 <div class=\"mdl-textfield__expandable-holder\">\n                     <input class=\"mdl-textfield__input\" type=\"text\" id=\"search\">\n                     <label class=\"mdl-textfield__label\" for=\"search\">Enter your query...</label>\n                 </div>--%>\n            </div>\n            <%-- <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\" id=\"hdrbtn\">\n                 <i class=\"material-icons\">more_vert</i>\n             </button>\n             <ul class=\"mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right\" for=\"hdrbtn\">\n                 <li class=\"mdl-menu__item\">About</li>\n                 <li class=\"mdl-menu__item\">Contact</li>\n                 <li class=\"mdl-menu__item\">Legal information</li>\n             </ul>--%>\n        </div>\n    </header>\n    <div class=\"demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--blue-grey-50\">\n        <header class=\"demo-drawer-header\">\n            <%-- <img src=\"images/user.jpg\" class=\"demo-avatar\">--%>\n            <div class=\"demo-avatar-dropdown\">\n                <h1>长理商城</h1>\n                <%-- <span>hello@example.com</span>--%>\n                <div class=\"mdl-layout-spacer\"></div>\n                <%--<button id=\"accbtn\" class=\"mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon\">\n                    <i class=\"material-icons\" role=\"presentation\">arrow_drop_down</i>\n                    <span class=\"visuallyhidden\">Accounts</span>\n                </button>\n                <ul class=\"mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect\" for=\"accbtn\">\n                    <li class=\"mdl-menu__item\">hello@example.com</li>\n                    <li class=\"mdl-menu__item\">info@example.com</li>\n                    <li class=\"mdl-menu__item\"><i class=\"material-icons\">add</i>Add another account...</li>\n                </ul>--%>\n            </div>\n        </header>\n        <nav class=\"demo-navigation mdl-navigation mdl-color--blue-grey-800\">\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/main\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">home</i>主页</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/information\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">inbox</i>个人信息</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/list\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">forum</i>订单管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/address\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">local_offer</i>地址管理</a>\n            <a class=\"mdl-navigation__link\" href=\"${pageContext.request.contextPath}/info/favorite\"><i class=\"mdl-color-text--blue-grey-400 material-icons\" role=\"presentation\">flag</i>我的收藏</a>\n        </nav>\n    </div>\n    <main class=\"mdl-layout__content mdl-color--grey-100\">\n            <div class=\"mdl-grid demo-content\" id=\"parent\">\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>未发货</h3><%--未收到货--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${!order.issend}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                            <div class=\"tab-content col-lg-12\">\n                                <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                    <tbody>\n                                    <td class=\"no-border col-lg-9\" >\n                                        订单号：<i name=\"orderid\">${order.orderid}</i>\n                                        &nbsp;\n                                        &nbsp;\n                                        订单日期:\n                                            ${order.ordertime.year+1900} 年\n                                            ${order.ordertime.month+1} 月\n                                            ${order.ordertime.date} 日\n                                        &nbsp;\n                                        收货地址:\n                                            ${order.address.province}\n                                            ${order.address.city}\n                                            ${order.address.county}\n                                    </td>\n                                    <%--<td class=\"no-border col-lg-7\">\n                                        订单日期:\n                                            ${order.ordertime.year+1900} 年\n                                            ${order.ordertime.month+1} 月\n                                            ${order.ordertime.date} 日\n                                        &nbsp;\n                                        收货地址:\n                                            ${order.address.province}\n                                            ${order.address.city}\n                                            ${order.address.county}\n                                    </td>--%>\n                                    <td  class=\"no-border col-lg-3\">\n                                        原价:${order.oldprice}  现价:${order.newprice}\n                                    </td>\n                                    </tbody>\n                                </table>\n                                <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                    <tbody>\n                                    <tr>\n                                        <td class=\"col-lg-1\">\n                                            商品号\n                                        </td>\n                                        <td class=\"col-lg-2\">\n                                            商品名称\n                                        </td>\n                                        <td class=\"col-lg-1\">\n                                            价格\n                                        </td>\n                                        <td class=\"col-lg-1\">\n                                            数量\n                                        </td>\n                                        <td class=\"col-lg-2\">\n                                            商品分类\n                                        </td>\n                                    </tr>\n                                    </tbody>\n                                </table>\n                            <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                            </c:forEach>\n                            </div>\n                            <div class=\"mdl-card__actions mdl-card--border\">\n                            </div>\n                        </div>\n                        </c:if>\n                    </c:forEach>\n\n                </div>\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>未收货</h3><%--未完成--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${order.issend&&!order.isreceive}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                                <div class=\"tab-content col-lg-12\">\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"no-border col-lg-9\" >\n                                                订单号：<i name=\"orderid\">${order.orderid}</i>\n                                                &nbsp;\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>\n                                            <%--<td class=\"no-border col-lg-7\">\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                &nbsp;\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>--%>\n                                            <td  class=\"no-border col-lg-3\">\n                                                原价:${order.oldprice}  现价:${order.newprice}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                商品号\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品名称\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                价格\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                数量\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品分类\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    </c:forEach>\n                                </div>\n                                <div class=\"mdl-card__actions mdl-card--border\">\n                                    <button class=\"templatemo-blue-button \" name=\"finishList\"><h5>完成订单</h5></button>\n                                </div>\n                            </div>\n                        </c:if>\n                    </c:forEach>\n\n                </div>\n                <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\">\n                    <h3>已完成</h3><%--已完成--%>\n                    <c:forEach items=\"${orderList}\" var=\"order\">\n                        <c:if test=\"${order.iscomplete}\">\n                            <div class=\"demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid\" name=\"parent\">\n                                <div class=\"tab-content col-lg-12\">\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--订单信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"no-border col-lg-9\" >\n                                                订单号：<i name=\"orderid\">${order.orderid}</i>\n                                                &nbsp;\n                                                &nbsp;\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>\n                                           <%-- <td class=\"no-border col-lg-7\">\n                                                订单日期:\n                                                    ${order.ordertime.year+1900} 年\n                                                    ${order.ordertime.month+1} 月\n                                                    ${order.ordertime.date} 日\n                                                &nbsp;\n                                                &nbsp;\n                                                &nbsp;\n                                                收货地址:\n                                                    ${order.address.province}\n                                                    ${order.address.city}\n                                                    ${order.address.county}\n                                            </td>--%>\n                                            <td  class=\"no-border col-lg-3\">\n                                               原价:${order.oldprice}  现价:${order.newprice}\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <table class=\"table \" cellpadding=\"6\" cellspacing=\"1\" ><%--商品描述--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                商品号\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品名称\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                价格\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                数量\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                商品分类\n                                            </td>\n                                            <td class=\"col-lg-1\">\n\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <c:forEach items=\"${order.goodsInfo}\" var=\"good\">\n                                    <table class=\"table table-bordered\" cellpadding=\"6\" cellspacing=\"1\" ><%--商品信息--%>\n                                        <tbody>\n                                        <tr>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.goodsid}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                <a href=\"${pageContext.request.contextPath}/detail?goodsid=${good.goodsid}\">${good.goodsname}</a>\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.price}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                    ${good.num}\n                                            </td>\n                                            <td class=\"col-lg-2\">\n                                                    ${good.category}\n                                            </td>\n                                            <td class=\"col-lg-1\">\n                                                <button class=\"mdl-button mdl-js-button mdl-js-ripple-effect font-color\" name=\"evaluate\" ><h5>评价</h5></button>\n                                            </td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    </c:forEach>\n                                </div>\n                                <div class=\"mdl-card__actions mdl-card--border\">\n                                    <button class=\"templatemo-blue-button finish-btn\" name=\"deleteList\"><h5>删除订单</h5></button>\n                                </div>\n                            </div>\n                        </c:if>\n                    </c:forEach>\n                </div>\n            </div>\n    </main>\n</div>\n\n<script src=\"https://code.getmdl.io/1.3.0/material.min.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/login.jsp",
    "content": "<%@page import=\"java.security.interfaces.RSAKey\"%>\n<%@ page language=\"java\" pageEncoding=\"UTF-8\"%>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<title>长理商城-欢迎登录</title>\n<script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/login.css\">\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n<link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n<script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n<script src=\"${pageContext.request.contextPath}/js/jquery.validate.min.js\"></script>\n\t<script src=\"${pageContext.request.contextPath}/js/login.js\"></script>\n</head>\n<%--<script>\n\n\t$(document).ready(function() {\n\n\t\t\n\t\t$(document).keypress(function(e) {\n\t\t\tif (e.which == 13) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\t$(\".login-input\").click();\n\t\t\t\t//form.submit();\n\t\t\t}\n\t\t});\n\t\tinput_value();\n\t})\n\t\n\tfunction input_value() {\n\t\tif (UserID != \"null\") {\n\t\t\tdocument.getElementById(\"inputEmail3\").value = UserID;\n\t\t}\n\t}\n</script>--%>\n\n<script type=\"text/javascript\">\n\tfunction reloadcode() {\n\t\tvar verify = document.getElementById('code');\n\t\tverify.setAttribute(\"src\", \"${pageContext.request.contextPath}/verificationcodeimg?it=\" + Math.random());\n\t}\n</script>\n\n\n<body onload=\"input_value()\">\n\t<div id=\"main\" class=\"container\">\n\t\t<div id=\"header\">\n\t\t\t<%@ include file=\"header.jsp\"%>\n\t\t</div>\n\t\t<div class=\"login\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"col-md-6\">\n\t\t\t\t\t<img src=\"./image/login.png\" alt=\"\" width=\"640\" height=\"400\" style=\"margin-left:-40px;margin-top:30px;\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-md-5 form-login\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<!-- <h2 class=\"login-h2\">登录</h2> -->\n\t\t\t\t\t\t<form class=\"form-horizontal\" id=\"form2\" action=\"${pageContext.request.contextPath}/loginconfirm\" method=\"post\">\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"username\" class=\"col-sm-2 control-label\">用户名</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"username\"\n\t\t\t\t\t\t\t\t\t\tname=\"username\" placeholder=\"用户名\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"password\" class=\"col-sm-2 control-label\">密码</label>\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" id=\"password\"\n\t\t\t\t\t\t\t\t\t\tname=\"password\" placeholder=\"密码\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<label for=\"confirmlogo\" class=\"col-sm-2 control-label\">验证码</label>\n\t\t\t\t\t\t\t\t<img src=\"${pageContext.request.contextPath}/verificationcodeimg\" id=\"code\" onclick=\"reloadcode()\"\n\t\t\t\t\t\t\t\t\tstyle=\"cursor: pointer;\" alt=\"看不清楚,换一张\" width=\"100px\">\n\t\t\t\t\t\t\t\t<div class=\"col-sm-10\" style=\"width: 160px\">\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"confirmlogo\"\n\t\t\t\t\t\t\t\t\t\tname=\"confirmlogo\" placeholder=\"验证码\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div style=\"margin-left:80px;color:red;\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t<div class=\"col-sm-offset-2 col-sm-10\">\n\t\t\t\t\t\t\t\t\t<input type=\"submit\" class=\"btn btn-primary login-input\" value=\"登录\"\n\t\t\t\t\t\t\t\t\t\tname=\"submit\">\n\t\t\t\t\t\t\t\t\t<a href=\"\" style=\"margin-left:10px;\">忘记密码?</a>\n\t\t\t\t\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t\t\t\t\t${errorMsg}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/main.jsp",
    "content": "<%@ page language=\"java\" pageEncoding=\"UTF-8\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n\n    <script>\n\n    </script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n\n    <div id=\"header\">\n        <%@ include file=\"header.jsp\" %>\n\n        <!-- 旋转图 -->\n        <div class=\"header-bottom\">\n            <div class=\"sort\">\n                <div class=\"sort-channel\">\n                    <ul class=\"sort-channel-list list-group\">\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=数码\">数码</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手机\">手机</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手机壳\">手机壳</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\">充电器</a> <a href=\"\">电池</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=耳机\">耳机</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=相机\">相机</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=镜头\">镜头</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=单反\">单反</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=胶片\">胶片</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=摄像\">摄像</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=电脑\">电脑</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=显示屏\">显示屏</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=显卡\">显卡</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=硬盘\">硬盘</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=内存条\">内存条</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=影音\">影音</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=MP3\">MP3</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=音响\">音响</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=麦克风\">麦克风</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=收音机\">收音机</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=日用\">日用</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=护肤\">护肤</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=洗发水\">洗发水</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=沐浴露\">沐浴露</a> <a href=\"\">洗面奶</a> <a\n                                            href=\"\">洗手液</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=美妆\">美妆</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=面膜\">面膜</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=口红\">口红</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=防嗮\">防嗮</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=香水\">香水</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=家居\">家居</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=书架\">书架</a><a href=\"${pageContext.request.contextPath}/category?cate=鞋柜\">鞋柜</a>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=衣架\">衣架</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=台灯\">台灯</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=闲置书籍\">书籍</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=英语\">英语</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=四六级\">四六级</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\">商务英语</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=听力\">听力</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=计算机\">计算机</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=自动化\">自动化</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=金融\">金融</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=其他\">其他</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=体育\">体育</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=足球\">足球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=乒乓球\">乒乓球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=篮球\">篮球</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=羽毛球\">羽毛球</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=经典\">经典</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=历史\">历史</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=名人\">名人</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=政治\">政治</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=小说\">小说</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=服饰\">服饰</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=女装\">女装</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=连衣裙\">连衣裙</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=充电器\"> 半身裙</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate= T恤\"> T恤 衬衫</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=卫衣\">卫衣</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=男装\">男装</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=外套\">外套</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=衬衫\">衬衫</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=夹克\">夹克</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=运动外套\">运动外套</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=鞋子\">鞋子</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=运动鞋\">运动鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=单鞋\">单鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=皮鞋\">皮鞋</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=拖鞋\">拖鞋</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=箱包\">箱包</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=女包\">女包</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=男包\">男包</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=旅行箱\">旅行箱</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=装饰品\">装饰品</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=配饰\">配饰</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=腰带\">腰带</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=皮带\">皮带</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=帽子\">帽子</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=围巾\">围巾</a>\n                                        <a\n                                                href=\"${pageContext.request.contextPath}/category?cate=手套\">手套</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=手表\">手表</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=机械表\">机械表</a><a\n                                            href=\"${pageContext.request.contextPath}/category?cate=石英表\">石英表</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电子表\">电子表</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=饰品\">饰品</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=眼镜\">眼镜</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=手链\">手链</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=项链\">项链</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=吊坠\">吊坠</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=收藏品\">收藏品</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=古玩\">古玩</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=邮票\">邮票</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=钱币\">钱币</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=陶瓷\">陶瓷</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=学习用品\">学习用品</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=编码\">编码</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=Java\">Java</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=PHP\">PHP</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=C\">C++</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=Python\">Python</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=培训\">培训</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=驾照\">驾照</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考研\">考研</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=计算机证书\">计算机证书</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=四六级\">四六级</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=线上课程\">线上课程</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=健身\">健身</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=考证\">考证</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=学习\">学习</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                        <li class=\"list-group-item\"><a href=\"${pageContext.request.contextPath}/category?cate=闲置百货\">百货</a>\n                            <div class=\"sort-detail\">\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=日用\">日用</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=雨伞\">雨伞</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=口罩\">口罩</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=拖布\">拖布</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电风扇\">电风扇</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=餐具\">餐具</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=餐盘\">餐盘</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=保温杯\">保温杯</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=饭盒\">饭盒</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=餐具套装\">餐具套装</a>\n                                    </dd>\n                                </dl>\n                                <dl class=\"dl-hor\">\n                                    <dt>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=出行\">出行</a>\n                                    </dt>\n                                    <dd>\n                                        <a href=\"${pageContext.request.contextPath}/category?cate=自行车\">自行车</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=电动车\">电动车</a> <a\n                                            href=\"${pageContext.request.contextPath}/category?cate=滑板\">滑板</a>\n                                    </dd>\n                                </dl>\n                            </div>\n                        </li>\n                    </ul>\n                </div>\n                <!-- <div class=\"sort-detail\">\n                    <dl class=\"dl-horizontal\">\n                        <dt>手机</dt>\n                        <dd>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=手机壳\">手机壳</a>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=充电器\">充电器</a>\n                            <a href=\"\">电池</a>\n                            <a href=\"${pageContext.request.contextPath}/category?cate=耳机\">耳机</a>\n                        </dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>相机</dt>\n                        <dd>\n                            <a href=\"\">镜头</a>\n                            <a href=\"\">单反</a>\n                            <a href=\"\">胶片</a>\n                            <a href=\"\">摄像</a>\n                        </dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>电脑</dt>\n                        <dd></dd>\n                    </dl>\n                    <dl class=\"dl-horizontal\">\n                        <dt>MP3</dt>\n                        <dd></dd>\n                    </dl>\n                </div> -->\n            </div>\n            <div id=\"mycarousel\" class=\"carousel slide\" data-ride=\"carousel\">\n                <div class=\"carousel-inner\">\n                    <div class=\"item active\">\n                        <img src=\"${pageContext.request.contextPath}/image/4.jpg\" alt=\"\">\n                    </div>\n\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/3.jpg\" alt=\"\">\n                    </div>\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/5.jpg\" alt=\"\">\n                    </div>\n                    <div class=\"item\">\n                        <img src=\"${pageContext.request.contextPath}/image/6.jpg\" alt=\"\">\n                    </div>\n                </div>\n\n                <ol class=\"carousel-indicators\">\n                    <li data-target=\"#mycarousel\" data-slide-to=\"0\" class=\"active\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"1\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"2\"></li>\n                    <li data-target=\"#mycarousel\" data-slide-to=\"3\"></li>\n                </ol>\n\n                <a class=\"left carousel-control\" href=\"#mycarousel\" role=\"button\"\n                   data-slide=\"prev\" style=\"display: none;\"> <span\n                        class=\"glyphicon glyphicon-chevron-left\" aria-hidden=\"true\"></span>\n                    <span class=\"sr-only\">Previous</span>\n                </a> <a class=\"right carousel-control\" href=\"#mycarousel\" role=\"button\"\n                        data-slide=\"next\" style=\"display: none;\"> <span\n                    class=\"glyphicon glyphicon-chevron-right\" aria-hidden=\"true\"></span>\n                <span class=\"sr-only\">Next</span>\n            </a>\n            </div>\n            <div class=\"clear-float\"></div>\n        </div>\n    </div>\n    <div class=\"content\">\n\n        <c:if test=\"${!empty digGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>数码</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${digGoods}\" var=\"goods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"><img src=\"/pictures/${goods.imagePaths[0].path}\" alt=\"\"\n                                                        width=\"200\" height=\"200\"/>\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${goods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${goods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${goods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!goods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${goods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty houseGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>家电</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${houseGoods}\" var=\"housegoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${housegoods.goodsid}\"> <img\n                                                src=\"/pictures/${housegoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${housegoods.goodsid}\">${housegoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${housegoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${housegoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${housegoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!housegoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${housegoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty colGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>服饰</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${colGoods}\" var=\"colgoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${colgoods.goodsid}\"> <img\n                                                src=\"/pictures/${colgoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${colgoods.goodsid}\">${colgoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${colgoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${colgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${colgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!colgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${colgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n\n        <c:if test=\"${!empty bookGoods}\">\n            <div class=\"module\">\n                <div class=\"hd\">\n                    <h2>书籍</h2>\n                    <hr>\n                </div>\n\n                <div class=\"bd\">\n                    <div class=\"data\">\n                        <ul>\n                            <c:forEach items=\"${bookGoods}\" var=\"bookgoods\">\n                                <li class=\"data-item-li\">\n                                    <div class=\"to-big\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${bookgoods.goodsid}\"> <img\n                                                src=\"/pictures/${bookgoods.imagePaths[0].path}\" alt=\"\"\n                                                width=\"200\" height=\"200\">\n                                        </a>\n                                    </div>\n                                    <p class=\"text-right\">\n                                        <a href=\"${pageContext.request.contextPath}/detail?goodsid=${bookgoods.goodsid}\">${bookgoods.goodsname}</a>\n                                    </p>\n                                    <div class=\"text-right\">\n                                        <b>￥${bookgoods.price}</b>\n                                    </div>\n                                    <div>\n                                        <c:if test=\"${bookgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                    data-id=\"${bookgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <c:if test=\"${!bookgoods.fav}\">\n                                            <button\n                                                    class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                    data-id=\"${bookgoods.goodsid}\"\n                                                    style=\"display: none;\"></button>\n                                        </c:if>\n                                        <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                    </div>\n                                </li>\n                            </c:forEach>\n\n                            <div class=\"clear-float\" style=\"clear: both;\"></div>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </c:if>\n    </div>\n</div>\n</body>\n</html>\n\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/orderConfirm.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/25\n  Time: 10:22\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/shopcart.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/order.css\">\n    <script src=\"${pageContext.request.contextPath}/js/order.js\"></script>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <jsp:include page=\"header.jsp\"/>\n</div>\n<div class=\"shopping_cart\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"account_heading account_heading_ah\">\n                    <h1 class=\"header-border\">确认订单</h1>\n                </div>\n            </div>\n        </div>\n\n        <%--确认收货地址--%>\n        <h4 class=\"header-border h4-mar\">确认收货地址<a href=\"${pageContext.request.contextPath}/info/address\" class=\"pull-right manage-a\">管理收货地址</a></h4>\n\n        <%--<form action=\"\" method=\"post\">--%>\n        <div class=\"address\">\n            <c:forEach items=\"${address}\" var=\"addItem\">\n                <div class=\"radio\">\n                    <label>\n                        <input type=\"radio\" name=\"addressid\" class=\"address-check\" value=\"${addItem.addressid}\"\n                               checked>\n                            ${addItem.province} ${addItem.city} ${addItem.county}  ${addItem.detailaddr}（${addItem.conname}收）${addItem.contel}\n                    </label>\n                </div>\n            </c:forEach>\n        </div>\n\n        <%--商品信息--%>\n        <h4 class=\"header-border h4-mar-2\">确认收货信息</h4>\n        <div class=\"row\">\n            <div class=\"all_wis_frm\">\n                <div class=\"col-md-12\">\n                    <div class=\"wishlist-content wishlist-content-2\">\n\n                        <div class=\"wishlist-table wishlist-table-2 table-responsive\">\n                            <table id=\"cart-table\">\n                                <thead>\n                                <tr>\n                                    <th class=\"product-thumbnail product-thumbnail-2\"></th>\n                                    <th class=\"product-name product-name_2\"><span\n                                            class=\"nobr\">商品</span></th>\n                                    <th class=\"product-price\"><span class=\"nobr\"> 价格\n\t\t\t\t\t\t\t\t\t\t\t\t</span></th>\n                                    <th class=\"product-stock-stauts\"><span class=\"nobr\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t数量 </span></th>\n                                    <th class=\"product-add-to-cart\"><span class=\"nobr\">总价</span></th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                <%--<c:set var=\"oldTotalPrice\" value=\"0\"/>--%>\n                                <c:forEach items=\"${goodsAndImage}\" var=\"goods\">\n                                    <tr>\n                                        <td class=\"product-thumbnail product-thumbnail-2\"><a\n                                                href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"><img\n                                                src=\"/pictures/${goods.imagePaths[0].path}\"\n                                                alt=\"\"/></a></td>\n                                        <td class=\"product-name product-name_2\"><a\n                                                href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                        </td>\n                                        <td class=\"product-price\"><span\n                                                class=\"amount-list amount-list-2\">￥${goods.price}</span></td>\n                                        <td class=\"product-stock-status\">\n                                            <div class=\"latest_es_from_2\">\n                                                <span>${goods.num}</span>\n                                            </div>\n                                        </td>\n                                        <td class=\"product-price\"><span\n                                                class=\"amount-list amount-list-2\">￥${goods.newPrice}</span></td>\n                                        <%--<c:set value=\"${oldTotalPrice+goods.price*goods.num*goods.activity.discount}\" var=\"oldTotalPrice\"/>--%>\n                                    </tr>\n                                </c:forEach>\n\n                                </tbody>\n                                <%--<tfoot>\n                                <tr>\n                                    <td colspan=\"6\">\n                                        <div class=\"coupon\">\n                                            <!-- <label for=\"coupon_code\"></label>\n                                                <input id=\"coupon_code\" class=\"input-text\" type=\"text\" placeholder=\"Coupon code\" value=\"\" name=\"coupon_code\"> -->\n                                            <a\n                                                    class=\"button_act button_act_3 button_act_333 button_act_tp \"\n                                                    href=\"./shopcart.jsp\">更新购物车</a>\n                                            <!-- <a class=\"button_act btn-tip \" href=\"#\">Update cart</a> -->\n                                        </div>\n                                    </td>\n                                </tr>\n                                </tfoot>--%>\n                            </table>\n                        </div>\n                        <div class=\"row\">\n                            <div class=\"col-md-5 col-xs-12 form-group form-group-lg\">\n                                <label class=\"col-sm-2 control-label\" for=\"pay-select\">选择支付方式</label>\n                                <div class=\"col-sm-10\">\n                                    <select class=\"form-control\" id=\"pay-select\">\n                                        <option value=\"1\">在线支付</option>\n                                        <option value=\"0\">货到付款</option>\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"col-md-6 col-md-offset-1 col-xs-12\">\n                                <div class=\"cart_totals\">\n                                    <h2>总价</h2>\n                                    <table class=\"shop_table shop_table_responsive\">\n                                        <tbody>\n                                        <tr class=\"cart-subtotal\">\n                                            <th>总额</th>\n                                            <td data-title=\"Subtotal\"><span\n                                                    class=\"woocommerce-Price-amount amount\">￥<span\n                                                    class=\"woocommerce-Price-currencySymbol\"\n                                                    id=\"total-old\">${oldTotalPrice}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span></td>\n                                        </tr>\n                                        <tr class=\"order-total\">\n                                            <th>实付款</th>\n                                            <td data-title=\"Total\"><strong> <span\n                                                    class=\"woocommerce-Price-amount amount\">￥<span\n                                                    class=\"woocommerce-Price-currencySymbol\"\n                                                    id=\"total-new\">${totalPrice}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n                                            </strong></td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <div class=\"wc-proceed-to-checkout\">\n                                        <%--<input type=\"submit\" class=\"button_act button_act-tc confirm-orders\" value=\"结算\"/>--%>\n                                        <button id=\"confirm-orders\"\n                                                class=\"button_act button_act-tc confirm-orders pull-right\">结算\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <%--</form>--%>\n\n    </div>\n</div>\n<div id=\"path\" hidden>${pageContext.request.contextPath}</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/register.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/23\n  Time: 20:50\n  To change this template use File | Settings | File Templates.\n--%>\n<%@page import=\"java.security.interfaces.RSAKey\"%>\n<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<%request.setCharacterEncoding(\"utf-8\");%>\n<%@ page import=\"java.sql.*\"%>\n<%@ page import=\"java.text.*\"%>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-个人注册</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/login.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.validate.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/validate.js\"></script>\n</head>\n\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <%@ include file=\"header.jsp\"%>\n    </div>\n    <div class=\"login\">\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <img src=\"${pageContext.request.contextPath}/image/register.png\" width=\"450\" height=\"600\" alt=\"\" style=\"margin-left: 40px;\">\n            </div>\n            <div class=\"col-md-5 form-register\">\n                <div>\n                    <!-- <h2 class=\"login-h2\">登录</h2> -->\n                    <form class=\"form-horizontal\" id=\"form\" action=\"${pageContext.request.contextPath}/registerresult\"\n                          method=\"post\">\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputName\" class=\"col-sm-2 control-label\">昵称</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"username\"\n                                       name=\"username\" placeholder=\"昵称\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputPassword\" class=\"col-sm-2 control-label\">密码</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"password\" class=\"form-control\" id=\"password\"\n                                       name=\"password\" placeholder=\"密码\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"confirmPassword\" class=\"col-sm-2 control-label\">确认密码</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"password\" class=\"form-control\"\n                                       id=\"confirmPassword\" name=\"confirmPassword\" placeholder=\"确认密码\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputTel\" class=\"col-sm-2 control-label\">联系方式</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"email\"\n                                       name=\"email\" placeholder=\"邮箱\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <!-- <label for=\"inputTel\" class=\"col-sm-2 control-label\">联系方式</label> -->\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" class=\"form-control\" id=\"telephone\"\n                                       name=\"telephone\" placeholder=\"联系方式\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-10\">\n                                <input type=\"hidden\" name=\"flag\" id=\"flag\" value=\"1\"> <input\n                                    type=\"submit\" class=\"btn btn-primary form-control\" value=\"注册\">\n                                <div class=\"error\">\n                                    ${errorMsg}\n                                </div>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n\n    </div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/search.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/25\n  Time: 22:54\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-搜索${keyword}</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <style>\n        .like-button {\n            left: 80% !important;\n            top: 70% !important;\n        }\n        .data>ul {\n            padding: 0;\n        }\n        .page-div {\n            margin-top: 10px;\n        }\n        .page-info {\n            padding: 35px 35px 35px 55px;\n        }\n    </style>\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <div id=\"header\">\n        <jsp:include page=\"header.jsp\"/>\n    </div>\n    <div class=\"content\">\n        <div class=\"module\">\n            <div class=\"\">\n                <h3>\n                    搜索结果><span style=\"color: red;\">${keyword}</span>\n                </h3>\n                <hr>\n            </div>\n\n            <div class=\"bd\">\n                <div class=\"data\">\n                    <ul>\n                        <c:forEach items=\"${pageInfo.list}\" var=\"goods\">\n                            <li class=\"data-item-li\">\n                                <div class=\"to-big\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\"> <img src=\"/pictures/${goods.imagePaths[0].path}\" width=\"260px\" height=\"260px\" alt=\"\"/>\n                                    </a>\n                                </div>\n                                <p class=\"text-right\">\n                                    <a href=\"${pageContext.request.contextPath}/detail?goodsid=${goods.goodsid}\">${goods.goodsname}</a>\n                                </p>\n                                <div class=\"text-right\">\n                                    <b>￥${goods.price}</b>\n                                </div>\n                                <div>\n                                    <c:if test=\"${goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <c:if test=\"${!goods.fav}\">\n                                        <button\n                                                class=\"like-button glyphicon glyphicon-heart-empty btn btn-default\"\n                                                data-id=\"${goods.goodsid}\"\n                                                style=\"display: none;\"></button>\n                                    </c:if>\n                                    <!-- <button class=\"like-button1 glyphicon glyphicon-heart-empty btn btn-default \"></button> -->\n                                </div>\n                            </li>\n                        </c:forEach>\n\n                        <div class=\"clear-float\" style=\"clear: both;\"></div>\n                    </ul>\n                </div>\n                <div class=\"row page-div\">\n                    <div class=\"col-md-5 page-info\">\n                        当前第${pageInfo.pageNum}页，共${pageInfo.pages}页，总共${pageInfo.size}条记录\n                    </div>\n                    <div class=\"col-md-6\">\n                        <nav aria-label=\"Page navigation\">\n                            <ul class=\"pagination pagination-lg\">\n\n                                <c:if test=\"${pageInfo.hasPreviousPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasPreviousPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.prePage}\" aria-label=\"Previous\">\n                                            <span aria-hidden=\"true\">&laquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:forEach items=\"${pageInfo.navigatepageNums}\" var=\"pageNums\">\n                                    <c:if test=\"${pageNums == pageInfo.pageNum}\">\n                                        <li class=\"active\"><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                    <c:if test=\"${pageNums != pageInfo.pageNum}\">\n                                        <li><a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageNums}\">${pageNums}</a></li>\n                                    </c:if>\n                                </c:forEach>\n\n                                <c:if test=\"${pageInfo.hasNextPage}\">\n                                    <li>\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                                <c:if test=\"${!pageInfo.hasNextPage}\">\n                                    <li class=\"disabled\">\n                                        <a href=\"${pageContext.request.contextPath}/search?keyword=${keyword}&page=${pageInfo.nextPage}\" aria-label=\"Next\">\n                                            <span aria-hidden=\"true\">&raquo;</span>\n                                        </a>\n                                    </li>\n                                </c:if>\n\n                            </ul>\n                        </nav>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/shopcart.jsp",
    "content": "\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>长理商城-购物车</title>\n    <script src=\"${pageContext.request.contextPath}/js/jquery.js\"></script>\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/main.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/bootstrap/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"${pageContext.request.contextPath}/css/shopcart.css\">\n    <script src=\"${pageContext.request.contextPath}/css/bootstrap/js/bootstrap.min.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sort.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/holder.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/shopcart.js\"></script>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n    <!-- \t<script>\n            $(document).ready(function(){\n                $(\".list-group-item\").hover(function(){\n                    $(this).children(\"div.sort-detail\").show();\n                },function(){\n                    $(this).children(\"div.sort-detail\").hide();\n                });\n            })\n        </script> -->\n</head>\n<body>\n<div id=\"main\" class=\"container\">\n    <jsp:include page=\"header.jsp\"/>\n</div>\n<div class=\"shopping_cart\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"account_heading account_heading_ah\">\n                    <h1>购物车</h1>\n                </div>\n            </div>\n        </div>\n        <div class=\"row\">\n            <div class=\"all_wis_frm\">\n                <div class=\"col-md-12\">\n                    <div class=\"wishlist-content wishlist-content-2\">\n                        <form action=\"#\">\n                            <div class=\"wishlist-table wishlist-table-2 table-responsive\">\n                                <table id=\"cart-table\">\n                                    <thead>\n                                    <tr>\n                                        <th class=\"product-remove\"><span class=\"nobr\"></span></th>\n                                        <th class=\"product-thumbnail product-thumbnail-2\"></th>\n                                        <th class=\"product-name product-name_2\"><span\n                                                class=\"nobr\">商品</span></th>\n                                        <th class=\"product-price\"><span class=\"nobr\"> 价格\n\t\t\t\t\t\t\t\t\t\t\t\t</span></th>\n                                        <th class=\"product-stock-stauts\"><span class=\"nobr\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t数量 </span></th>\n                                        <th class=\"product-add-to-cart\"><span class=\"nobr\">总价</span></th>\n                                    </tr>\n                                    </thead>\n                                    <tbody>\n\n\n\n\n                                    </tbody>\n                                    <%--<tfoot>\n                                    <tr>\n                                        <td colspan=\"6\">\n                                            <div class=\"coupon\">\n                                                <!-- <label for=\"coupon_code\"></label>\n                                                    <input id=\"coupon_code\" class=\"input-text\" type=\"text\" placeholder=\"Coupon code\" value=\"\" name=\"coupon_code\"> -->\n                                                <a\n                                                        class=\"button_act button_act_3 button_act_333 button_act_tp \"\n                                                        href=\"./shopcart.jsp\">更新购物车</a>\n                                                <!-- <a class=\"button_act btn-tip \" href=\"#\">Update cart</a> -->\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    </tfoot>--%>\n                                </table>\n                            </div>\n                        </form>\n                        <div class=\"row\">\n                            <div class=\"col-md-6 col-xs-12\">\n                                <div class=\"cart_totals \">\n                                    <h2>总价</h2>\n                                    <table class=\"shop_table shop_table_responsive\">\n                                        <tbody>\n                                        <tr class=\"cart-subtotal\">\n                                            <th>小计</th>\n                                            <td data-title=\"Subtotal\"><span\n                                                    class=\"woocommerce-Price-amount amount\"> <span\n                                                    class=\"woocommerce-Price-currencySymbol\" id=\"total-num\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span></td>\n                                        </tr>\n                                        <tr class=\"order-total\">\n                                            <th>总额</th>\n                                            <td data-title=\"Total\"><strong> <span\n                                                    class=\"woocommerce-Price-amount amount\"> <span\n                                                    class=\"woocommerce-Price-currencySymbol\" id=\"total-price\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n                                            </strong></td>\n                                        </tr>\n                                        </tbody>\n                                    </table>\n                                    <div class=\"wc-proceed-to-checkout\">\n                                        <a class=\"button_act button_act-tc confirm-orders\" href=\"${pageContext.request.contextPath}/order\">确认订单</a>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"col-md-6 col-xs-12\"></div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" hidden>${pageContext.request.contextPath}</div>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/sidebar.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/19\n  Time: 14:36\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<div class=\"templatemo-sidebar\">\n    <header class=\"templatemo-site-header\">\n        <div class=\"square\"></div>\n        <h1>后台管理</h1>\n    </header>\n    <div class=\"mobile-menu-icon\">\n        <i class=\"fa fa-bars\"></i>\n    </div>\n    <nav class=\"templatemo-left-nav\">\n        <ul>\n            <li><a href=\"${pageContext.request.contextPath}/admin/user/show\"><i class=\"fa fa-user fa-fw\"></i>用户管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/goods/show\"><i class=\"fa fa-bar-chart fa-fw\"></i>商品管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/order/send\"><i class=\"fa fa-users fa-fw\"></i>订单管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/activity/show\"><i class=\"fa fa-database fa-fw\"></i>活动管理</a></li>\n        <%--<li><a href=\"${pageContext.request.contextPath}/admin/goods/show\"><i class=\"fa fa-map-marker fa-fw\"></i>活动管理</a></li>--%>\n            <li><a href=\"${pageContext.request.contextPath}/admin/chat\"><i class=\"fa fa-sliders fa-fw\"></i>客服管理</a></li>\n            <li><a href=\"${pageContext.request.contextPath}/admin/logout\"><i class=\"fa fa-eject fa-fw\"></i>退出系统</a></li>\n        </ul>\n    </nav>\n</div>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/userManage.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 文辉\n  Date: 2017/7/22\n  Time: 11:18\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>后台管理</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"templatemo\">\n    <!--\n    Visual Admin Template\n    http://www.templatemo.com/preview/templatemo_455_visual_admin\n    -->\n    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,700' rel='stylesheet' type='text/css'>\n    <link href=\"${pageContext.request.contextPath}/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"${pageContext.request.contextPath}/css/templatemo-style.css\" rel=\"stylesheet\">\n\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n\n    <%--swal弹框--%>\n    <script src=\"${pageContext.request.contextPath}/js/sweetalert.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"${pageContext.request.contextPath}/css/sweetalert.css\">\n\n</head>\n<body>\n<!-- Left column -->\n<div class=\"templatemo-flex-row\">\n    <jsp:include page=\"sidebar.jsp\"></jsp:include>\n    <!-- Main content -->\n    <div class=\"templatemo-content col-1 light-gray-bg\">\n        <div class=\"templatemo-top-nav-container\">\n            <div class=\"row\">\n                <nav class=\"templatemo-top-nav col-lg-12 col-md-12\">\n                    <ul class=\"text-uppercase\">\n                        <li><a href=\"\" class=\"active\">所有用户</a></li>\n                        <%--<li><a href=\"\">Dashboard</a></li>\n                        <li><a href=\"\">Overview</a></li>\n                        <li><a href=\"login.html\">Sign in form</a></li>--%>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n        <div class=\"templatemo-content-container\">\n            <div class=\"templatemo-content-widget no-padding\">\n                <div class=\"panel panel-default table-responsive\">\n                    <table id=\"goodsinfo\" class=\"table table-striped table-bordered templatemo-user-table\">\n                        <thead>\n                        <tr>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">id<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">用户名<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">Email<span class=\"caret\"></span></a></td>\n                            <td><a href=\"\" class=\"white-text templatemo-sort-by\">联系电话<span class=\"caret\"></span></a></td>\n                            <td>删除</td>\n                        </tr>\n                        </thead>\n                        <tbody>\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n\n            <div class=\"pagination-wrap\" id=\"page-div-nav\">\n                <div class=\"page-info\" id=\"page-info-area\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"path\" style=\"display: none;\">${pageContext.request.contextPath}</div>\n<!-- JS -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-1.11.2.min.js\"></script>      <!-- jQuery -->\n<script src=\"${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.min.js\"></script> <!--  jQuery Migrate Plugin -->\n<script src=\"https://www.google.com/jsapi\"></script> <!-- Google Chart -->\n<script>\n    /* Google Chart\n     -------------------------------------------------------------------*/\n    // Load the Visualization API and the piechart package.\n    google.load('visualization', '1.0', {'packages':['corechart']});\n\n    // Set a callback to run when the Google Visualization API is loaded.\n    google.setOnLoadCallback(drawChart);\n\n    // Callback that creates and populates a data table,\n    // instantiates the pie chart, passes in the data and\n    // draws it.\n    function drawChart() {\n\n        // Create the data table.\n        var data = new google.visualization.DataTable();\n        data.addColumn('string', 'Topping');\n        data.addColumn('number', 'Slices');\n        data.addRows([\n            ['Mushrooms', 3],\n            ['Onions', 1],\n            ['Olives', 1],\n            ['Zucchini', 1],\n            ['Pepperoni', 2]\n        ]);\n\n        // Set chart options\n        var options = {'title':'How Much Pizza I Ate Last Night'};\n\n        // Instantiate and draw our chart, passing in some options.\n        var pieChart = new google.visualization.PieChart(document.getElementById('pie_chart_div'));\n        pieChart.draw(data, options);\n\n        var barChart = new google.visualization.BarChart(document.getElementById('bar_chart_div'));\n        barChart.draw(data, options);\n    }\n\n    $(document).ready(function(){\n        if($.browser.mozilla) {\n            //refresh page on browser resize\n            // http://www.sitepoint.com/jquery-refresh-page-browser-resize/\n            $(window).bind('resize', function(e)\n            {\n                if (window.RT) clearTimeout(window.RT);\n                window.RT = setTimeout(function()\n                {\n                    this.location.reload(false); /* false to get page from cache */\n                }, 200);\n            });\n        } else {\n            $(window).resize(function(){\n                drawChart();\n            });\n        }\n    });\n\n</script>\n<script type=\"text/javascript\" src=\"${pageContext.request.contextPath}/js/templatemo-script.js\"></script>      <!-- Templatemo Script -->\n<script src=\"${pageContext.request.contextPath}/js/userManage.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/views/verificationcodeimg.jsp",
    "content": "<%--\n  Created by IntelliJ IDEA.\n  User: 蒋松冬\n  Date: 2017/7/22\n  Time: 9:50\n  To change this template use File | Settings | File Templates.\n--%>\n<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<%--<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>--%>\n<%@page import=\"com.zhang.ssmschoolshop.util.verificate.Verificate\" %>\n<%--<%\n    String path = request.getContextPath();\n    String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\";\n%>--%>\n<%@page contentType=\"image/jpeg\"%>\n<jsp:useBean id=\"image\" scope=\"page\" class=\"com.zhang.ssmschoolshop.util.verificate.Verificate\" />\n<%\n    String str = image.getCertPic(0, 0, response.getOutputStream());\n    // 将认证码存入SESSION\n    session.setAttribute(\"certCode\", str);\n    out.clear();\n    out = pageContext.pushBody();\n%>\n\n<html>\n<head>\n    <title>Title</title>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/WEB-INF/web.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n\t\t                     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\"\n         version=\"3.0\">\n  <display-name>Archetype Created Web Application</display-name>\n\n\n  <!--启动Spring的容器-->\n  <context-param>\n    <param-name>contextConfigLocation</param-name>\n    <param-value>classpath:applicationContext.xml</param-value>\n  </context-param>\n\n  <listener>\n    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>\n  </listener>\n\n  <!--SpringMVC的前端控制器，拦截所有请求-->\n  <!--<servlet>\n      <servlet-name>dispatcherServlet</servlet-name>\n      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>\n      <load-on-startup>1</load-on-startup>\n  </servlet>\n  <servlet-mapping>\n      <servlet-name>dispatcherServlet</servlet-name>\n      <url-pattern>/</url-pattern>\n  </servlet-mapping>-->\n  <servlet>\n    <servlet-name>SpringMVC</servlet-name>\n    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>\n    <init-param>\n      <param-name>contextConfigLocation</param-name>\n      <param-value>classpath:spring-mvc.xml</param-value>\n    </init-param>\n    <load-on-startup>1</load-on-startup>\n  </servlet>\n  <servlet-mapping>\n    <servlet-name>SpringMVC</servlet-name>\n    <url-pattern>/</url-pattern>\n  </servlet-mapping>\n\n  <!--字符编码过滤器,一定放在最前面-->\n  <filter>\n    <filter-name>CharacterEncodingFilter</filter-name>\n    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>\n    <init-param>\n      <param-name>encoding</param-name>\n      <param-value>utf-8</param-value>\n    </init-param>\n  </filter>\n  <filter-mapping>\n    <filter-name>CharacterEncodingFilter</filter-name>\n    <url-pattern>/*</url-pattern>\n  </filter-mapping>\n\n  <!--Rest风格的URI,将页面普通的post的请求转为delete或post请求-->\n  <filter>\n    <filter-name>HiddenHttpMethodFilter</filter-name>\n    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>\n  </filter>\n  <filter-mapping>\n    <filter-name>HiddenHttpMethodFilter</filter-name>\n    <url-pattern>/*</url-pattern>\n  </filter-mapping>\n\n</web-app>\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/bootstrap/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/bootstrap/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/bootstrap/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/chat.css",
    "content": ".chat-div {\n\twidth: 100%;\n\tmargin: 40px auto 0px auto;\n}\n\n.chat {\n\t/*margin: 30px;*/\n\twidth: 73%;\n\tdisplay: inline-block;\n\t/*margin-top: 0;*/\n\tmargin-left: 0%;\n\tposition: relative;\n\ttop: -45px;\n}\n\n.chat-content {\n\tpadding: 20px;\n\tbackground: #F8F8F8;\n\twidth: 100%;\n\theight: 500px;\n\toverflow-x: hidden;\n\toverflow-y: auto;\n}\n\n.chat-message {\n\tmargin-top: 8px;\n\tmargin-bottom: 8px;\n}\n\n.message-icon-left {\n\tposition: absolute;\n\tright: auto;\n\tleft: -21px;\n\tcolor: #FFF;\n}\n\n.message-icon-right {\n\tposition: absolute;\n\t/*left: 5px;*/\n\tright: -280px;\n\tcolor: #DDD;\n}\n\n.info-content {\n\tdisplay: inline-block !important;\n\tdisplay: inline;\n\twidth: auto;\n}\n\n.chat-message-content1 {\n\tposition: relative;\n\tfloat: left;\n\tbackground: #FFFFFF;\n\tmargin-right: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #DDD;\n\tborder-radius: 4px;\n}\n\n\n.chat-message-content2 {\n\tposition: relative;\n\tfloat: right;\n\tbackground: #34BBF9;\n\tmargin-left: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #34BBF9;\n\tborder-radius: 4px;\n}\n\n/*.form-group {\n\twidth: 100%;\n\theight: 100%;\n}*/\n\n.form-div {\n\t/*padding: 1%;*/\n}\n\n.input-div {\n\twidth: 86%;\n\tmargin: 2% 0.8% 2% 0.9%;\n}\n\n.send-div {\n\twidth: 11%;\n\theight: 53px;\n\tmargin-top: 2%;\n}\n\n#input-message {\n\twidth: 100%;\n}\n\n.send-div>input {\n\theight: 100%;\n}\n\n.chat-list {\n\twidth: 20%;\n\theight: 565px;\n\tdisplay: inline-block;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tmargin-left: 2%;\n\tposition: relative;\n\ttop: -15px;\n\t/*background: #EBEBEC;*/\n\n}\n\n.list-item {\n\theight: 66px;\n\tborder-right: 1px solid gray;\n\tbackground: #FAF7F4;\n\tpadding-top: 4px;\n\tpadding-left: 45px;\n\t/*font-size: 20px;*/\n}\n\n.list-item {\n\tdisplay: none;\n}\n\n#user-no {\n\tdisplay: none;\n}\n\n.a-card {\n    text-decoration: none !important;\n    display: block;\n    border: 1px solid #DDD;\n    margin: 0;\n    color: black;\n}\n\n.card {\n    height: 60px;\n    text-align: center;\n    padding-top: 25px;\n}\n\n.a-card:hover {\n    transition:transform .8s cubic-bezier(0.23, 1, 0.32, 1), box-shadow .8s cubic-bezier(0.23, 1, 0.32, 1);\n    box-shadow:0 0 20px rgba(0, 0, 0, 0.3);\n    transform:scale(1.01);\n    background-color: #F8F8F8;\n    z-index:2;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/chatrobot.css",
    "content": ".clear-float {\n\tclear: both;\n}\n\n#input-message {\n\t/*font-size: 30px;*/\n}\n\n.chat-div {\n\twidth: 100%;\n\tmargin: 0 auto;\n}\n\n.chat {\n\t/*margin: 30px;*/\n\twidth: 100%;\n\tdisplay: inline-block;\n\t/*margin-top: 0;*/\n\tmargin-left: 0%;\n\tposition: relative;\n\t/*top: -45px;*/\n}\n\n.chat-content {\n\tpadding: 20px;\n\tbackground: #F8F8F8;\n\twidth: 100%;\n\theight: 565px;\n\toverflow-x: hidden;\n\toverflow-y: auto;\n}\n\n.chat-message {\n\tmargin-top: 8px;\n\tmargin-bottom: 8px;\n}\n\n.message-icon-left {\n\tposition: absolute;\n\tright: auto;\n\tleft: -21px;\n\tcolor: #FFF;\n}\n\n.message-icon-right {\n\tposition: absolute;\n\t/*left: 5px;*/\n\tright: -280px;\n\tcolor: #DDD;\n}\n\n.info-content {\n\tdisplay: inline-block !important;\n\tdisplay: inline;\n\twidth: auto;\n}\n\n.chat-message-content1 {\n\tposition: relative;\n\tfloat: left;\n\tbackground: #FFFFFF;\n\tmargin-right: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #DDD;\n\tborder-radius: 4px;\n}\n\n\n.chat-message-content2 {\n\tposition: relative;\n\tfloat: right;\n\tbackground: #34BBF9;\n\tmargin-left: 20%;\n\twidth: auto;\n\tbox-shadow: none;\n\tpadding: 11px;\n\tborder: 1px solid #34BBF9;\n\tborder-radius: 4px;\n}\n\n/*.form-group {\n\twidth: 100%;\n\theight: 100%;\n}*/\n\n.form-div {\n\t/*padding: 1%;*/\n}\n\n.input-div {\n\twidth: 86%;\n\tmargin: 2% 0.8% 2% 0.9%;\n}\n\n.send-div {\n\twidth: 11%;\n\theight: 53px;\n\tmargin-top: 2%;\n}\n\n#input-message {\n\twidth: 100%;\n}\n\n.send-div>input {\n\theight: 100%;\n}\n\n.chat-list {\n\twidth: 20%;\n\theight: 625px;\n\tdisplay: inline-block;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tmargin-left: 2%;\n\tposition: relative;\n\ttop: 43px;\n\t/*background: #EBEBEC;*/\n\n}\n\n.list-item {\n\theight: 66px;\n\tborder-right: 1px solid gray;\n\tbackground: #FAF7F4;\n\tpadding-top: 4px;\n\tpadding-left: 45px;\n\t/*font-size: 20px;*/\n}\n\n::-webkit-scrollbar {\n    height: 10px;\n    width: 7px;\n    background: rgba(0,0,0,.1);\n}\n\n::-webkit-scrollbar-thumb {\n    background: rgba(8, 174, 237, 0.3);\n    border-radius: 6px;\n}\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/favorite.css",
    "content": "/**{\n    margin:0px;\n    padding:0px;\n}\n*/\nbody{\n    background:#e5e6d0;\n}\n\n.favorite {\n    margin-top: 2%;\n}\n\n.favorite-side {\n    margin-top: 2%;\n    width: 30%;\n}\n\n.fav-menu {\n    margin-top: 5%;\n}\n\n.fav-menu,#banner,#main-fav,#footer{\n    /*margin-top:1%;*/\n    /*width:1140px;*/\n}\n\n.caret-right {\n    position: absolute;\n    top: 22px;\n    left: 210px;\n}\n\n/* 万能的清除*/\n.clear{\n    clear:both;\n}\n.fav-menu{\n    padding-top:1px;\n}\n.fav-menu ul{\n    list-style:none;\n    /*padding-left: 15px;*/\n}\n.fav-menu>ul{\n    /*list-style:none;*/\n    padding-left: 15px;\n}\n\n.top-li {\n    border-top: 1px solid #FFFFFF;\n}\n\n.fav-menu ul li{\n    /*float:left;*/\n    margin:1px;\n    width: 230px;\n    border-bottom: 1px solid #FFFFFF;\n    border-right: 1px solid #FFFFFF;\n    /*border-left: 1px solid #FFFFFF;*/\n    position: relative;\n}\n\n.fav-menu ul li a{\n    color:#996699;\n   \n    font-family:Vivaldi;\n    text-align:center;\n    display:block;\n    width:120px;\n    height:50px;\n    line-height:46px;\n    font-size:25px;\n    margin-left: 22px;\n    text-decoration: none;\n}\n.fav-menu ul li a:hover{\n    background:#ffcccc;\n}\n.fav-menu ul li ul{\n    display:none;\n    width:120px;\n    position:absolute;\n    z-index: 10;\n    left: 100%;\n    top: 0%;\n    background:#ffcccc;\n}\n.fav-menu ul li:hover ul{\n    display:block;\n}\n.fav-menu ul li ul li{\n    width:120px;\n    position: relative;\n    right: 40px;\n}\n.fav-menu ul li ul li a{\n    width:120px;\n    padding-left: 0px;\n    margin-left: 0px;\n}\n.fav-menu ul li ul li a:hover{\n    background:#ff9999;\n}\n\n#main-fav{\n    padding:10px 10px;\n}\n/*#main-fav .container{\n    width:900px;\n    float:left;\n}\n*/#main-fav .product{\n    float:left;\n    padding-left:10px;\n    list-style:none;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/information.css",
    "content": ".ui-menu {\n\tposition: relative;\n\tz-index: 19;\n}\n\n.ui-menu li a {\n\tborder-bottom: 2px solid rgb(241, 241, 229);\n\tcolor: #2894FF;\n\twidth: 100%;\n}\n\n.ui-menu li a:hover, .ui-menu li.cur a {\n\tborder-bottom: 2px solid #2894FF;\n\tcolor: #2894FF;\n}\n\n.ui-menu a {\n\theight: 37px;\n\tline-height: 37px;\n\tfont-size: 16px;\n\tdisplay: inline-block;\n\ttext-align: center;\n\ttext-decoration: none;\n}\n\n.nav-tabs {\n\tborder-bottom: 1px solid #2894FF;\n}\n\n.well {\n\tbackground-color: #fff;\n\tborder-radius: 5px;\n\tborder: solid 1px #e5e6e6;\n\tbox-shadow: 0px 3px 5px #d2d6da;\n  /*box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);*/\n\tposition: relative\n}\n\n.well_condition {\n\tbackground-color: #fff;\n\tborder: solid 1px #e5e6e6;\n\tbox-shadow: 0px 3px 5px #d2d6da;\n\tborder-radius: 5px;\n}\n\n.bs-docs-example {\n\tdisplay: inline-block;\n\twidth: 500px;\n\tposition: relative;\n\tmargin: 15px 10px;\n\t\n\tpadding: 39px 19px 14px;\n\tbackground-color: #fff;\n\tborder: 1px solid #ddd;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n}\n\n.grid {\n\twidth: 100%;\n}\n\n.clear-border {\n\tborder: 0px !important;\n}\n\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #fa7c63;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n  text-decoration: none !important;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n.section-padding {\n  padding-bottom: 50px;\n}\n.section-title {\n  margin-bottom: 35px;\n}\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n::selection {\n   background: #b3d4fc;\n   text-shadow: none;\n}\n.browserupgrade {\n  margin: 0.2em 0;\n  background: #ccc;\n  color: #000;\n  padding: 0.2em 0;\n}\n\n/*----------------------------------------*/\n/*  23. Shopping cart area\n/*----------------------------------------*/\n.dm_content_2 {\n  margin-top: 36px;\n}\n.new_act_4{\n  margin-top: 20px;\n  margin-left: -15px\n}\n.cramb_area_4{\n  margin-left: -19px;\n}\n.button_act.button_act_3.button_act_333 {\n  margin-left: 94px;\n  margin-top: 2px;    \n}\n.wishlist-table-2 table th, .wishlist-table-2 table td {\n  font-family: Open Sans,sans-serif;\n  font-size: 12px;\n  font-weight: 700;\n  padding: 16px 28px;\n  text-align: left;\n  text-transform: uppercase;\n}\n.wishlist-table-2 table .product-thumbnail-2 {\n  width: 195px;\n}\n.product-thumbnail.product-thumbnail-2 img {\n  /* margin-left: 22px; */\n}\n.latest_es_from_2 > input[type=\"number\"] {\n  background: #ffffff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  font-weight: normal;\n  height: 40px;\n  padding: 0 10px;\n  transition: all 0.3s ease 0s;\n  width: 52px;\n  margin-left: 18px;    \n}\n.amount-list.amount-list-2 {\n  margin-left: 19px;\n}\n.coupon .input-text {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  height: 40px;\n  line-height: 40px;\n  width: 150px !important;\n  border: 1px solid #d3ced2;\n  box-sizing: border-box;\n  float: left;\n  line-height: 1;\n  margin: 0 4px 0 0;\n  outline: 0 none;\n  padding: 6px 11px 5px;\n  font-weight: normal;\n  border-radius: 3px;    \n}\n.product-remove.product-remove_2 > a {\n  margin-left: -34px;\n  padding: 0px 45px;\n}\n.button_act.button_act_3.button_act_333.button_act_tp{\n  margin-left: 83% !important;\n  margin-top: 0;\n}\n.button_act.btn-tip {\n  margin-left: 672px;\n}\n.button_act.btn-tip:hover{\n  background-color: #ebe9eb;\n  color: inherit;    \n}\n.cart_totals {\n  margin: 30px 0 0;\n}\n.cart_totals h2 {\n  font-size: 20px;\n  margin: 0 0 30px;\n  text-transform: uppercase;\n}\n.shop_table td {\n  border-top: 0 none;\n  padding: 20px 28px;\n}\n.cart_totals .cart-subtotal .amount, .cart_totals .order-total .amount {\n  font-size: 16px;\n  font-weight: bold;\n}\n.shop_table {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-collapse: separate;\n  border-radius: 5px;\n  margin: 0 -1px 34px 0;\n  text-align: left;\n  width: 100%;\n}\n.shop_table th {\n  font-weight: 700;\n  padding: 9px 12px;\n}\n.button_act.button_act-tc {\n  margin-bottom: 50px;\n}\n.coupon {\n  margin-bottom: 10px;\n  margin-top: 7px;\n}\n.account_heading.account_heading_ah {\n  margin: -6px 0;\n}\n\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0; \n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n\n.wishlist-table table {\n  background: #fff none repeat scroll 0 0;\n  border-color: #e8e8e9;\n  border-radius: 0;\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n  margin: 20px 0 33px;\n  width: 100%;\n}\n.wishlist-table table{}\n.wishlist-table table th {\n  font-weight: 600;\n}\n.wishlist-table table th, .wishlist-table table td {\n  border-bottom: 1px solid #e7e7e7;\n  border-right: 1px solid #e7e7e7;\n  font-size: 14px;\n  font-weight: 500;\n  padding: 15px 12px;\n  text-align: left;\n  text-transform: uppercase;\n  font-family: Open Sans,sans-serif;  \n}\n.wishlist-table table .product-remove {\n  padding: 20px 28px;\n  width: 20px;\n}\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n.wishlist-table table .product-thumbnail {\n  width: 100px;\n}\n.wishlist-table table td.product-price .amount {\n  font-weight: 700;\n}\n.wishlist-table table .wishlist-in-stock {\n  color: #297e29;\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 55px;\n  text-transform: capitalize;\n}\n/* \n.nav>li>a {\n\ttext-shadow: none !important;\n  padding: 0px !important;\n} */\n\n.form-control {\n  height: 32px;\n}\n\n.dropdown .caret {\n    margin-top: 0px !important;\n    margin-left: 2px;\n}\n\n.well {\n\twidth: 1090px !important;\n}\n\n.bs-docs-example {\n\twidth: \n}\n\n.part {\n\tmargin-left: 20px;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/infostyle.css",
    "content": "/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml, body {\n  font-family: 'Roboto', 'Helvetica', sans-serif;\n}\n.demo-avatar {\n  width: 48px;\n  height: 48px;\n  border-radius: 24px;\n}\n.demo-layout .mdl-layout__header .mdl-layout__drawer-button {\n  color: rgba(0, 0, 0, 0.54);\n}\n.mdl-layout__drawer .avatar {\n  margin-bottom: 16px;\n}\n.demo-drawer {\n  border: none;\n}\n/* iOS Safari specific workaround */\n.demo-drawer .mdl-menu__container {\n  z-index: -1;\n}\n.demo-drawer .demo-navigation {\n  z-index: -2;\n}\n/* END iOS Safari specific workaround */\n.demo-drawer .mdl-menu .mdl-menu__item {\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.demo-drawer-header {\n  box-sizing: border-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-justify-content: flex-end;\n      -ms-flex-pack: end;\n          justify-content: flex-end;\n  padding: 16px;\n  height: 151px;\n}\n.demo-avatar-dropdown {\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n  -webkit-flex-direction: row;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  width: 100%;\n}\n\n.demo-navigation {\n  -webkit-flex-grow: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n.demo-layout .demo-navigation .mdl-navigation__link {\n  display: -webkit-flex !important;\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -webkit-flex-direction: row;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  color: rgba(255, 255, 255, 0.56);\n  font-weight: 500;\n}\n.demo-layout .demo-navigation .mdl-navigation__link:hover {\n  background-color: #00BCD4;\n  color: #37474F;\n}\n.demo-navigation .mdl-navigation__link .material-icons {\n  font-size: 24px;\n  color: rgba(255, 255, 255, 0.56);\n  margin-right: 32px;\n}\n\n.demo-content {\n  max-width: 1080px;\n}\n\n.demo-charts {\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.demo-chart:nth-child(1) {\n  color: #ACEC00;\n}\n.demo-chart:nth-child(2) {\n  color: #00BBD6;\n}\n.demo-chart:nth-child(3) {\n  color: #BA65C9;\n}\n.demo-chart:nth-child(4) {\n  color: #EF3C79;\n}\n.demo-graphs {\n  padding: 16px 32px;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-align-items: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n}\n/* TODO: Find a proper solution to have the graphs\n * not float around outside their container in IE10/11.\n * Using a browserhacks.com solution for now.\n */\n_:-ms-input-placeholder, :root .demo-graphs {\n  min-height: 664px;\n}\n_:-ms-input-placeholder, :root .demo-graph {\n  max-height: 300px;\n}\n/* TODO end */\n.demo-graph:nth-child(1) {\n  color: #00b9d8;\n}\n.demo-graph:nth-child(2) {\n  color: #d9006e;\n}\n\n.demo-cards {\n  -webkit-align-items: flex-start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -webkit-align-content: flex-start;\n      -ms-flex-line-pack: start;\n          align-content: flex-start;\n}\n.demo-cards .demo-separator {\n  height: 32px;\n}\n.demo-cards .mdl-card__title.mdl-card__title {\n  color: white;\n  font-size: 24px;\n  font-weight: 400;\n}\n.demo-cards ul {\n  padding: 0;\n}\n.demo-cards h3 {\n  font-size: 1em;\n}\n.demo-updates .mdl-card__title {\n  min-height: 200px;\n  background-image: url('images/dog.png');\n  background-position: 90% 100%;\n  background-repeat: no-repeat;\n}\n.demo-cards .mdl-card__actions a {\n  color: #00BCD4;\n  text-decoration: none;\n}\n\n.demo-options h3 {\n  margin: 0;\n}\n.demo-options .mdl-checkbox__box-outline {\n  border-color: rgba(255, 255, 255, 0.89);\n}\n.demo-options ul {\n  margin: 0;\n  list-style-type: none;\n}\n.demo-options li {\n  margin: 4px 0;\n}\n.demo-options .material-icons {\n  color: rgba(255, 255, 255, 0.89);\n}\n.demo-options .mdl-card__actions {\n  height: 64px;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  box-sizing: border-box;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/login.css",
    "content": ".form-login {\n\tmargin-top: 15%;\n\t/* background-image: url(../image/tao.jpg); */\n}\n\nbody {\n\t/* background-image: url(../image/tao.jpg); */\n}\n\n.login-h2 {\n\tmargin-left: 25px;\n}\n\n.form-register {\n\tmargin-top: 6%;\n}\n\n.error {\n\tcolor: red;\n}\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/main.css",
    "content": "/*li {\n\tdisplay: inline-block;\n\tlist-style: none;\n\tmargin-right: 7px;\n}*/\n \n#header {\n\tmargin-top: 8px;\n\t/*background: #F5F5F5;*/\n}\n#header-bottom {\n\t\n}\n#header-nav-middle {\n\tbackground-color: #222;\n\tborder-color: #080808;\n\n}\n\n#bs-example-navbar-collapse-1 {\n\tmargin-left: 150px;\n}\n\n.header-bottom {\n\theight: auto;\n}\n\n.clear-float {\n\tclear: both;\n}\n\n#mycarousel {\n\twidth: 80%;\n\tfloat: left;\n\tmargin-left: 1%;\n/*\tdisplay: inline;\n\toverflow: hidden;\n\tposition: relative;*/\n}\n\n.sort {\n\twidth: 19%;\n\theight: auto;\n\tfloat: left;\n\t/*position: relative;*/\n\t/*margin-right: 5%;*/\n}\n\n.sort-channel {\n\n}\n\n.sort-detail {\n\t/*float: left;*/\n\tposition: absolute;\n\tz-index: 10;\n\ttop: 0px;\n\t/*left: 218px;*/\n\tleft: 102%;\n\tbackground: white;\n\twidth: 300px;\n\tdisplay: none;\n\t/*float: left;*/\n\tpadding: 5px;\n\tborder:1px solid gray;\n\n\tborder-radius: 3px;\n\n}\n\n.sort-channel-list>li {\n\tlist-style: none;\n\tpadding: 10px 30px;\n}\n\n.list-group-item>a{\n\tcolor: black;\n\ttext-decoration: none;\n}\n\n/*.dl-horizontal dt {\n\ttext-align: left !important;\n\twidth: auto !important;\n}\n\n.dl-horizontal dd {\n\ttext-align: left !important;\n\twidth: auto !important;\n\tmargin-left: 0;\n}*/\n\n.dl-hor {\n\t/*border-top: none;*/\n\tfloat: left;\n\tclear: both;\n\tmargin: 10px 10px 10px 5px;\n}\n\n.dl-hor>dt {\n\tfloat: left;\n\tmargin-right: 18px;\n}\n\n.dl-hor>dd {\n\tfloat: left;\n}\n\n.dl-hor>dd>a {\n\tmargin-right: 8px;\n}\n\n.dl-hor>dt>a {\n\tcolor: red;\n}\n\n.hd>h2 {\n\tborder-left: 3px solid black;\n\tpadding-left: 10px;\n}\n\n.data>ul {\n\tpadding: 0 15px;\n\tmargin-bottom: 0 !important;\n}\n\n.data>ul>li {\n\tlist-style: none;\n\tfloat: left;\n\tmargin: 2px 9px;\n\tposition: relative;\n}\n\n.hd>hr {\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n}\n\n.content {\n\tmargin: 23px 8px;\n}\n\n.module {\n\tborder-bottom: 1px solid #EEE;\n\tmargin-top: 6px;\n}\n\np.text-right {\n\tmargin-right: 5px;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tfont-size: 20px;\n}\n\np.text-right>a {\n\tcolor: black;\n\ttext-decoration: none;\n}\n\np.text-right>a:hover {\n\tcolor: orange;\n}\n\ndiv.text-right {\n\tmargin-right: 5px;\n}\n\n.text-right>b {\n\tcolor: #f40;\n\tfont-size: 15px;\n}\n\n.like-button {\n\tfont-size: 15px !important;\n\tposition: absolute !important;\n\tz-index: 10 !important;\n\tleft: 70% !important;\n\ttop: 60% !important;\n}\n\n/*.like-button2 {\n\tfont-size: 15px !important;\n\tposition: absolute !important;\n\tz-index: 10 !important;\n\tleft: 80% !important;\n\ttop: 70% !important;\n\tdisplay: none !important;\n}*/\n\n.dropdown-menu {\n\ttop: 75% !important;\n}\n\n.login-out {\n\tcolor: red !important;\n}\n\n.navbar-nav>li>a {\n\tcolor: #d4c8bb !important;\n}\n\n.navbar-nav>li>a:hover{\n\tcolor: #e83038 !important;\n}\n\n.logo-word {\n\tfont-family:chiller;\n\tfont-size:25px;\n\tcolor:#dad5d5 !important;\n}\n\n.log-word:hover {\n\tcolor:red !important;\n}\n\n.to-big:hover {\n    transition:transform .8s cubic-bezier(0.23, 1, 0.32, 1), box-shadow .8s cubic-bezier(0.23, 1, 0.32, 1);\n    box-shadow:0 0 20px rgba(0, 0, 0, 0.3);\n    transform:scale(1.05);\n    z-index:2;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/order.css",
    "content": ".header-border {\n    border-bottom: solid 1px #c6c5c5;\n}\n\n.h4-mar{\n    margin-top: 30px;\n}\n\n.h4-mar-2 {\n    margin-top: 30px;\n}\n\n.address>.radio {\n    padding-left: 50px;\n}\n\n.radio>label {\n    margin: 5px 0 5px 0;\n}\n\n.address-check input[type='checkbox']:checked {\n    background: #FFF0E8;\n    border: solid 1px #f40;\n}\n\n.manage-a {\n    font-size: 15px;\n    color: #2aabd2;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/release.css",
    "content": "@charset \"utf-8\";\n/* CSS Document */\n\n.release {\n  margin-left: 10%;\n  width: 80%;\n}\n\n.submit-input {\n  /*width:30%; */\n  /*margin-left:*/\n}\n\n.upload-button {\n  /*width: 30%*/;\n  margin-left: 0;\n}\n\nh1 {\n  /*margin-left:-50px;*/\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/shopcart.css",
    "content": "﻿/*  1. Template default css\n/*========================================*/\n@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i|Oswald:300,400,700');\n\nhtml,\nbody {\n height: 100%;\n}\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #fa7c63;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n  text-decoration: none !important;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n.section-padding {\n  padding-bottom: 50px;\n}\n.section-title {\n  margin-bottom: 35px;\n}\n::-moz-selection {\n    background: #b3d4fc;\n    text-shadow: none;\n}\n::selection {\n   background: #b3d4fc;\n   text-shadow: none;\n}\n.browserupgrade {\n  margin: 0.2em 0;\n  background: #ccc;\n  color: #000;\n  padding: 0.2em 0;\n}\n\n/*----------------------------------------*/\n/*  23. Shopping cart area\n/*----------------------------------------*/\n.dm_content_2 {\n  margin-top: 36px;\n}\n.new_act_4{\n  margin-top: 20px;\n  margin-left: -15px\n}\n.cramb_area_4{\n  margin-left: -19px;\n}\n.button_act.button_act_3.button_act_333 {\n  margin-left: 94px;\n  margin-top: 2px;    \n}\n.wishlist-table-2 table th, .wishlist-table-2 table td {\n  font-family: Open Sans,sans-serif;\n  font-size: 12px;\n  font-weight: 700;\n  padding: 16px 28px;\n  text-align: left;\n  text-transform: uppercase;\n}\n.wishlist-table-2 table .product-thumbnail-2 {\n  width: 195px;\n}\n.product-thumbnail.product-thumbnail-2 img {\n  /* margin-left: 22px; */\n}\n.latest_es_from_2 > input[type=\"number\"] {\n  background: #ffffff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  font-weight: normal;\n  height: 40px;\n  padding: 0 10px;\n  transition: all 0.3s ease 0s;\n  width: 52px;\n  margin-left: 18px;    \n}\n.amount-list.amount-list-2 {\n  margin-left: 19px;\n}\n.coupon .input-text {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  height: 40px;\n  line-height: 40px;\n  width: 150px !important;\n  border: 1px solid #d3ced2;\n  box-sizing: border-box;\n  float: left;\n  line-height: 1;\n  margin: 0 4px 0 0;\n  outline: 0 none;\n  padding: 6px 11px 5px;\n  font-weight: normal;\n  border-radius: 3px;    \n}\n.product-remove.product-remove_2 > a {\n  margin-left: -34px;\n  padding: 0px 45px;\n}\n.button_act.button_act_3.button_act_333.button_act_tp{\n  margin-left: 83% !important;\n  margin-top: 0;\n}\n.button_act.btn-tip {\n  margin-left: 672px;\n}\n.button_act.btn-tip:hover{\n  background-color: #ebe9eb;\n  color: inherit;    \n}\n.cart_totals {\n  /*margin: 0px 0 0;*/\n}\n.cart_totals h2 {\n  font-size: 20px;\n  margin: 0 0 30px;\n  text-transform: uppercase;\n}\n.shop_table td {\n  border-top: 0 none;\n  padding: 20px 28px;\n}\n.cart_totals .cart-subtotal .amount, .cart_totals .order-total .amount {\n  font-size: 16px;\n  font-weight: bold;\n}\n.shop_table {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-collapse: separate;\n  border-radius: 5px;\n  margin: 0 -1px 34px 0;\n  text-align: left;\n  width: 100%;\n}\n.shop_table th {\n  font-weight: 700;\n  padding: 9px 12px;\n}\n.button_act.button_act-tc {\n  margin-bottom: 50px;\n}\n.coupon {\n  margin-bottom: 10px;\n  margin-top: 7px;\n}\n.account_heading.account_heading_ah {\n  margin: -6px 0;\n}\n\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0;\n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n\n.wishlist-table table {\n  background: #fff none repeat scroll 0 0;\n  border-color: #e8e8e9;\n  border-radius: 0;\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n  margin: 20px 0 33px;\n  width: 100%;\n}\n.wishlist-table table{}\n.wishlist-table table th {\n  font-weight: 600;\n}\n.wishlist-table table th, .wishlist-table table td {\n  border-bottom: 1px solid #e7e7e7;\n  border-right: 1px solid #e7e7e7;\n  font-size: 14px;\n  font-weight: 500;\n  padding: 15px 12px;\n  text-align: left;\n  text-transform: uppercase;\n  font-family: Open Sans,sans-serif;  \n}\n.wishlist-table table .product-remove {\n  padding: 20px 28px;\n  width: 20px;\n}\n.wishlist-table table .product-remove > a {\n  color: #ff0000;\n  font-size: 20px;\n}\n.wishlist-table table .product-thumbnail {\n  width: 100px;\n}\n.wishlist-table table td.product-price .amount {\n  font-weight: 700;\n}\n.wishlist-table table .wishlist-in-stock {\n  color: #297e29;\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 55px;\n  text-transform: capitalize;\n}\n\ntable th, table td {\n  border-bottom: 1px solid #e1e1e1;\n  border-right: 1px solid #e1e1e1;\n  padding: 8px;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/shopdetail.css",
    "content": "@charset \"utf-8\";\n\n/*通用样式*/\n.shopdetails a{\n\ttext-decoration:none;\n\tcolor:#333;\n\tfont-size:12px;\n}\n.shopdetails ul,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,p{\n\tpadding:0; margin:0;\n\tlist-style:none;\n}\n.shopdetails img{ border:0px;}\n.clear{\n\tclear:both;\n}\n\n\n/*放大镜*/\n#leftbox{\n\twidth:400px;\n\tz-index:999;\n\tmargin-left: 15px;\n\t/*position:absolute;*/\n}\n#showbox { background:#eee;}\n#showbox img{\n\tz-index: 100;\n}\n#showbox span {\n\tbackground:url(../image/whitebg.png) repeat;\n}\n#showsum {\n\tleft:25px;\n\tmargin-top:10px;\n}\n#showsum span {\n\tborder:1px solid #ddd;\n}\n#showsum span.sel {\n\tborder:1px solid #f60;\n}\n\n.showpage {\n\twidth:400px;\n\tposition:relative;\n}\n.showpage a {\n\tdisplay:block; width:15px;\n\tborder:1px solid #ddd;\n\theight:60px; line-height:60px;\n\tbackground:#eee;\n\ttext-align:center;\n\tfont-size:18px;\n\tposition:absolute;\n\tleft:0; top:-62px;\n\ttext-decoration:none;\n\tcolor:#999;}\n.showpage a#shownext {\n\tleft:auto; right:0;\n}\n.showpage a:hover {\n\tbackground:#ccc;\n\tcolor:#777;\n}\n\n.rel-div {\n    position: relative;\n    top: 50px;\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/style.css",
    "content": "﻿/*-----------------------------------------------------------------------------------\n\n    Template Name: Orienko Responsive eCommerce Fashion Template\n    Template URI: http://bootexperts.com\n    Description: This is html5 template\n    Author: BootExperts\n    Author URI: http://bootexperts.com\n    Version: 1.0\n\n===============================================================\n\nCSS INDEX\n===================\n1. Template default css\n\n5. product area\n6. plus area\n7. catagory area\n8. differ pic area\n9. lumia area\n10. top rate area\n11. fchared area\n12. blog area\n13. logo area\n14. Checkout page\n15. newsletter area\n16. footer top area\n    16.1 footer middle area\n    16.2 footer botom area\n17. home page 2\n18. home page 3\n19. shop area left\n20. shop area right\n21. my account area\n22. wishlist area\n23. shopping cart area\n24. simple product area\n25. variable product area\n26. grouped product area\n\n==============================================================*/\n\n\n/*========================================*/\n\n/*  1. Template default css\n/*========================================*/\n@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i|Oswald:300,400,700');\n\n.big-font {\n  font-size: 20px !important;\n  padding-top: 20px;\n}\n\n.main-detail-nav>li {\n  display: inline-block;\n}\n\n.main-detail-nav {\n  margin-left: 15px !important;\n}\n\nhtml,\nbody {\n height: 100%;\n}\na:focus {\n  outline: 0px solid\n}\na:hover, a:focus {\n  color: #39ADB4;\n  text-decoration: none;\n}\nimg {\n max-width: 100%;\n height: auto\n}\n.fix {\n  overflow: hidden\n}\np {\n margin: 0 0 15px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;\n  line-height: 1.3;\n  margin: 0 0 10px;\n}\na {\n transition: all 0.3s ease 0s;\n text-decoration: none;\n color: #666;\n}\n.pr {\n  padding-right: 0;\n}\n.pl {\n  padding-left: 0;\n}\na:active,\na:hover {\n  outline: 0 none;\n}\nul {\n list-style: outside none none;\n margin: 0;\n padding: 0\n}\n.clear {\n    clear: both\n}\nbody {\n  color: #666666;\n  font-family: \"Open Sans\";\n  font-size: 13px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 20px;\n  visibility: visible;\n}\n\n/*----------------------------------------*/\n/*  5. Product area\n/*----------------------------------------*/\n\n.new_product {\n  padding-left: 75px;\n  position: relative;\n}\n.product_heading i {\n  background: #467ecb none repeat scroll 0 0;\n  border-bottom: 2px solid #3c69a6;\n  border-radius: 4px;\n  bottom: 0;\n  color: #fff;\n  display: block;\n  font-size: 28px;\n  height: 55px;\n  left: 0;\n  line-height: 55px;\n  position: absolute;\n  text-align: center;\n  width: 55px;\n}\n.product_heading > span {\n  border-bottom: 2px solid #f2f2f2;\n  color: #666666;\n  display: block;\n  font-family: Oswald,sans-serif;\n  font-size: 22px;\n  font-weight: 300;\n  line-height: 55px;\n  position: relative;\n  text-transform: uppercase;\n}\n.product_heading_tf > span{\n  margin-left: 15px; \n}\n.product_heading.product_heading_tf > span {\n  border-bottom: medium none #000080;\n}\n.product_heading.product_heading_tf > span::before {\n  background: #e1e1e1 none repeat scroll 0 0;\n  border-bottom: medium none;\n  bottom: -2px;\n  color: #000000;\n  content: \"\";\n  height: 1px;\n  left: 0;\n  position: absolute;\n  width: 1067px;\n}\n.product_heading > span::after {\n  border-bottom: 2px solid #fa7c63;\n  bottom: -2px;\n  content: \"\";\n  left: 0;\n  position: absolute;\n  width: 150px;\n}\n.single_product {\n  position: relative;\n}\n.single_product span {\n  background: #ffb128 none repeat scroll 0 0;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: auto;\n  line-height: 45px;\n  position: absolute;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n  right: 10px;\n}\n.sinle_pic {\n  border: 1px solid #e5e5e5;\n  overflow: hidden;\n  position: relative;\n  border-bottom: none;    \n}\n.sinle_pic a {\n  position: relative;\n  display: block;\n}\n.sinle_pic img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros:hover .sinle_pic img.secondary-img,\n.all-pros:hover .sinle_pic img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n} \n.product-action .quickview {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 3px;\n  color: #fff;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 14px;\n  font-weight: 300;\n  line-height: 30px;\n  padding: 0 20px;\n  opacity: 0;\n  visibility: hidden;\n  transform: scale(0.5)\n}\n.product-action .quickview:hover {\n  background-color: #f85332;\n}\n.product-action ul li {\n  position: absolute;\n  right: 62px;\n  z-index: 9;\n}\n.all-pros {\n  animation-delay: 500ms;\n  animation-duration: 0.5s;\n  margin-bottom: 38px;\n  margin-top: 30px;\n  overflow: hidden;\n  position: relative;\n}\n.all-pros-2 {\n  animation-delay: 200ms;\n  animation-duration: 0.5s;\n}\n.all-pros-3 {\n  animation-delay: 300ms;\n  animation-duration: 0.5s;\n}\n.all-pros-4 {\n  animation-delay: 400ms;\n  animation-duration: 0.5s;\n}\n.all-pros-5 {\n    animation-delay: 500ms;\n    animation-duration: 0.5s;\n}\n.all-pros-6 {\n  animation-delay: 600ms;\n  animation-duration: 0.5s;\n}\n.all-pros-7 {\n  animation-delay: 700ms;\n  animation-duration: 0.5s;\n}\n.all-pros-8 {\n  animation-delay: 800ms;\n  animation-duration: 0.5s;\n}\n.all-pros-9 {\n  animation-delay: 900ms;\n  animation-duration: 0.5s;\n}\n\n.all-pros-10 {\n    animation-delay: 100ms;\n    animation-duration: 0.5s;\n}\n.product-action {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 24%;\n  transition: all 0.5s ease 0s;\n}\n.all-pros:hover .product-action .quickview {\n  transform: scale(1);\n  opacity: 1;\n  visibility: visible;\n}\n.shop-products.products .product .product-wrapper:hover .list-col4 .product-image .detail-link {\n  animation: 300ms ease 0s normal none 1 running smallToBig;\n  opacity: 1;\n  visibility: visible;\n}\n.action-cart {\n  transition: all 0.2s ease 0s;\n  bottom: 113px;\n}\n.action-wishlist {\n  transition: all 0.3s ease 0s;\n  bottom: 78px;\n}\n.action-compare {\n  transition: all 0.4s ease 0s;\n  bottom: 43px;\n}\n.action-quickview {\n  transition: all 0.5s ease 0s;\n  bottom: 8px;\n}\n.sinle_pic .product-action {\n  opacity: 0;\n}\n.sinle_pic:hover .product-action {\n  opacity: 1;\n}\n.product_name > h2 > a {\n  color: #000;\n  font-size: 14px;\n  font-weight: 600;\n  margin-left: -211px;\n  transition: .5s;\n}\n.product_name > h2 > a:hover {\n  color: #14bfcc;\n}\n.price_box {\n  color: #ed1c24;\n  font-size: 15px;\n  font-weight: bold;\n  margin-bottom: 13px;\n  margin-top: 3px;\n  min-height: 25px;\n  position: relative;\n  z-index: 2;\n  margin-left: 3px;    \n}\n.old-.price {\n  color: #666;\n  text-decoration: line-through;\n  margin-left: -219px;\n  font-family: Open Sans, sans-serif;\n  font-weight: normal;\n}\n.old-.price.old-.price-3 {\n  font-size: 14px;    \n}\n.price_rating > a > i {\n  color: #f7bb39;\n font-size: 12px;\n}\n.product_name_2 h2 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 15px;\n  font-weight: normal;\n  letter-spacing: 0;\n  margin: 14px 0 -1px;\n}\n.product_name_2 h2 > a:hover {\n  color: #fa7c63;\n}\n.not-rated > i {\n  color: #d3ced2 !important;\n}\n.product_content {\n  border: 1px solid #e5e5e5;\n  position: relative;\n  text-align: center;\n  z-index: 9;\n}\n.usal_pro {\n  overflow: hidden;\n}\n.last_button_area ul li {\n  display: inline-block;\n}\n.last_button_area ul li {\n  padding: 1px;\n}\n.last_button_area {\n  margin: -3px 0 15px;\n}\n.button_act {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n}\n.button_act:hover {\n  background: #fa7c63;\n  color: #fff;\n  border-color: #fa7c63;\n}\na.add_to_wishlist {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0);\n}\na.compare {\n  opacity: 0;\n  transition: .3s;\n  transform: scale(0)\n}\n.all-pros:hover a.add_to_wishlist,\n.all-pros:hover a.compare {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.yith-wcwl-add-button i {\n  color: #999999;\n  font-size: 19px;\n  margin-top: 9px;\n}\na.compare {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #fff none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  color: #999999;\n  display: block;\n  font-size: 0;\n  height: 40px;\n  line-height: 40px;\n  padding: 0;\n  text-align: center;\n  text-shadow: 0 0 0;\n  text-transform: uppercase;\n  width: 40px;\n}\n.compare.button i {\n  color: #666;\n  font-size: 19px;\n  margin-top: 9px;\n}\n.yith-wcwl-add-button:hover i {\n  color: #fff\n}\n.yith-wcwl-add-button.show.show-2 {\n  display: inline-block !important;\n}\n.add_to_wishlist:hover, .add_to_wishlist_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;\n}\n.compare.button i:hover, .compare_3.button i:hover {\n  color: #fff;\n}\na.compare:hover,.compare_3:hover {\n  background: #fa7c63;\n  border-color: #fa7c63;    \n}\n.all_product {\n  position: relative;\n}\n.indicator-brand.owl-buttons {\n  position: absolute;\n  right: 20px;\n  top: -74px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -69px;\n  width: 100%;\n  left: 4px;\n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next:hover{\n  border-color: #fa7c63;\n  box-shadow: 0 2px 0 #f85332;\n  background:#fa7c63;\n  color: #fff;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n  position: absolute;\n  right: 0;    \n}\n.indicator-brand.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;    \n}\n.new_cosmatic.indicator-brand.indicator-brand-2.indicator-brand-3.owl-carousel.owl-theme {\n margin: -9px 2px;\n}\n.single_product_3 {\n  background:  #ef3835;\n  border-radius: 50%;\n  color: #fff;\n  font-size: 13px;\n  font-weight: normal;\n  height: 45px;\n  left: 10px;\n  line-height: 45px;\n  position: absolute;\n  right: auto;\n  text-align: center;\n  text-transform: capitalize;\n  top: 10px;\n  width: 45px;\n  z-index: 1;\n}\n.single_product_2 > span {\n  background: #467ecb;\n}\n.new_cosmatic.indicator-brand.indicator-brand-2.owl-carousel.owl-theme {\n  margin-top: -7px;\n}\n.cosmatics_products {\n  background: #fa7c63 none repeat scroll 0 0;\n  border-bottom: 2px solid #f85332;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 300;\n  height: 55px;\n  line-height: 55px;\n  padding: 0 15px 0 12px;\n  text-transform: uppercase;\n  font-family: Oswald, sans-serif;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 191px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons div.owl-next {\n   position: absolute;\n   right: 24px;\n}\n.indicator-brand-2.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -73px;\n  width: 100%;\n}\n.cosmatics_products i {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  height: 50px;\n  line-height: 50px;\n}\n.cdown {\n  float: left;\n  margin: 0 10px;\n}\n.count-down-area {\n  border-top: 1px solid #e1e1e1;\n  display: block;\n  float: left;\n  margin-top: 6px;\n  text-align: center;\n  width: 100%;\n}\n.cdown.days{\n  margin-bottom: 10px;    \n}\n.price_box.price_box_dgr {\n  margin-bottom: 0;\n}\nspan.cdown {\n float: left;\n width: 25%;\n color: #666;\n height: 60px;\n text-transform: capitalize;\n display: inline-block;\n margin: 0;\n font-size: 13px;\n font-family: \"Open Sans\"; \n margin-top: 5px; \n font-weight: 500;    \n}\n.usal_pro.usal_pro_eb {\n  margin-bottom: -6px;\n}\n.time-count{\n  font-weight: 600; \n  font-family: \"Open Sans\";     \n}\nspan.cdown strong {\n color: #444;\n font-size: 12px;\n font-weight: 400;\n font-family: \"Open Sans\";    \n position: relative;    \n}\n.cdown.days{\n  margin-bottom: 0;    \n}\n/*----------------------------------------*/\n/*  6. Plus area\n/*----------------------------------------*/\n.plus_area {\n  margin-bottom: 38px;\n}\n.pix_new {\n  display: inline-block;\n  margin: 0;\n  max-width: 100%;\n  position: relative;\n  vertical-align: top;\n  z-index: 9;\n}\n.pix_new a::before {\n  background: rgba(255, 255, 255, 0.3) none repeat scroll 0 0;\n  bottom: 0;\n  content: \"\";  \n  left: 0;\n  opacity: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 99;\n}\n.pix_new img {\n  height: auto;\n  max-width: 100%;\n  vertical-align: top;\n} \n.pix_new a {\n  display: block;\n  overflow: hidden;\n  position: relative;\n}\n.pix_new a:hover::before {\n   left: 50%;\n   opacity: 1;\n   right: 50%;\n   transition: all 900ms ease 0s;\n}\n/*----------------------------------------*/\n/*  7. Catagory area\n/*----------------------------------------*/\n.favtabs > li {\n  display: inline-block;\n}\n.favtabs > li > a {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 1px solid #dfdfdf !important;\n  border-radius: 3px;\n  display: block;\n  font-size: 13px;\n  height: 33px;\n  line-height: 31px;\n  margin: 1;\n  padding: 0 15px;\n  position: relative;\n  transition: all 0.3s ease 0s;\n  color: #666;\n}\n.favtabs li a:hover{\n  background: #39ADB4;\n  color: #fff;\n  border-color: #39ADB4 !important;\n  border-width: 1px 1px 2px !important;    \n}\n.favtabs > li.active > a {\n  background: #39ADB4;\n  color: #fff;\n  border-color: #39ADB4!important;\n  border-image: none !important;\n  border-style: solid !important;\n  border-width: 1px 1px 2px !important;     \n}\n.favtabs {\n  margin: 0;\n  position: absolute;\n  right: 0;\n  top: -45px;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n  opacity: 0;\n}\n.feature-carousel:hover.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n    opacity: 1;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: 137px;\n  width: 100%;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 14px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 15px;\n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-prev:hover {\n  border-color:#39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.indicator-brand-3.owl-theme .owl-controls .owl-buttons div.owl-next:hover {\n  border-color:#39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n/*----------------------------------------*/\n/*  8. Differ pic area\n/*----------------------------------------*/\n.differ_pic {\n  margin-bottom: 38px;\n}\n/*----------------------------------------*/\n/*  9. Lumia area\n/*----------------------------------------*/\n\n.lumia_area {\n  margin-bottom: 38px;\n}\n/*----------------------------------------*/\n/*  10. Top rate area\n/*----------------------------------------*/\n.top_rate_area {\n  margin-bottom: 8px;\n  overflow: hidden;\n}\n.top_rate_area.top_rate_area_2 {\n  margin-bottom: 2px;\n}\n.llc_pro {\n  float: left;\n  width: 100px;\n}\n.product_name_new h2 a {\n  font-size: 14px;\n}\n.product_price.product_price_new_3 {\n  margin-top: -3px;\n}\n.sinle_pic_2 {\n  border: 0;\n  overflow: hidden;\n  position: relative;\n}\n.sinle_pic_2 a {\n  position: relative;\n  display: block;\n}\n.sinle_pic_2 img {\n  backface-visibility: hidden;\n  display: block;\n  height: 100%;\n  transition: all 1s cubic-bezier(0.19, 1, 0.22, 1) 0s;\n  width: 100%;\n}\n.sinle_pic_2 img.secondary-img {\n  left: 0;\n  position: absolute;\n  top: 100%;\n}\n.all-pros-ex:hover .sinle_pic_2 img.secondary-img,\n.all-pros-ex:hover .sinle_pic_2 img.primary-img {\n  transform: translate3d(0px, -100%, 0px);\n}\n.product_content_2 {\n  border: 0 none;\n  margin-bottom: 8px;\n  margin-left: 111px;\n  margin-top: -11px;\n  padding: 0 0 0 11px;\n  text-align: left;\n}\n.all-pros-ex {\n  animation-delay: 100ms;\n  animation-duration: 0.5s;\n  margin-top: 25px;\n  overflow: hidden;\n  position: relative;\n  border-bottom: 1px solid#e5e5e5;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div {\n  background-color: #fff;\n  border: 1px solid #ededed;\n  border-radius: 100%;\n  box-shadow: 0 2px 0 #ededed;\n  color: #333;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 17px;\n  height: 35px;\n  line-height: 25px;\n  margin: 26px 2px;\n  text-align: center;\n  transition: all 300ms ease 0s;\n  width: 35px;\n  opacity: 1;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -71px;\n  width: 100%;\n  left: 14px;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 187px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-next {\n  position: absolute;\n  right: 24px;\n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-prev:hover {\n  border-color: #39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.indicator-brand-4.owl-theme .owl-controls .owl-buttons div.owl-next:hover {\n  border-color: #39ADB4;\n  box-shadow: 0 2px 0 #39ADB4;\n  background:#39ADB4;\n  color: #fff;    \n}\n.single-sidebar {\n  float: left;\n  margin: 0 0 30px;\n  padding: 20px;\n  width: 90%;\n  border: 1px solid#e1e1e1;\n}\n.single-sidebar h3 {\n  color: #444;\n  font-size: 16px;\n  margin: 0 0 25px;\n text-transform: uppercase;\n}\n.compare_content .new_tag > a {\n  border: 1px solid #e1e1e1;\n  border-radius: 3px;\n  display: inline-block;\n  font-size: 12px !important;\n  font-weight: normal;\n  line-height: 30px;\n  margin: 0 5px 5px 0;\n  padding: 0 12px;\n  text-transform: capitalize;\n  color: #666;\n}\n.new_tag a:hover {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-color: #39ADB4;\n  color: #fff;\n}\n/*----------------------------------------*/\n/*  11. Fchared area\n/*----------------------------------------*/\n.fchered_area {\n  margin-bottom: 30px;\n}\n.fchered_item {\n  background: #fff none repeat scroll 0 0;\n  padding: 0 0 25px;\n  text-align: center;\n}\n.fechered_pix {\n  border-bottom: 1px solid#e1e1e1;\n}\n.fechered_heading h3 > a {\n  font-family: Open Sans, sans-serif;\n  font-size: 14px;\n  font-weight: bold;\n  margin: 25px 0 20px;\n  text-transform: uppercase;\n}\na.view_button {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #ededed none repeat scroll 0 0;\n  border-color: #dedede;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #666;\n  display: inline-block;\n  font-family: Oswald, sans-serif;\n  font-size: 13px;\n  font-weight: normal;\n  height: 40px;\n  line-height: 38px;\n  padding: 0 20px !important;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n  cursor: pointer\n}\na.view_button:hover {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-color: #39ADB4;\n  color: #fff;\n}\n.chard_ex_al {\n  border: 1px solid #e1e1e1;\n  margin-bottom: 38px;\n}\n.indicator-brand-5.owl-theme .owl-controls .owl-buttons {\n  position: absolute;\n  top: -103px;\n  width: 100%;\n  left: 10px;\n}\n.indicator-brand-5.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 771px;\n}\n.indicator-brand-bg.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 1062px;\n}\n/*----------------------------------------*/\n/*  12. Blog area\n/*----------------------------------------*/\n.blog {\n  margin-bottom: 31px;\n  overflow: hidden;\n}\n.blog_thumb {\n  position: relative;\n}\n.blog_thumb a::before {\n  backface-visibility: hidden;\n  background: rgba(63, 63, 63, 0.5) none repeat scroll 0 0;\n  bottom: 0px;\n  content: \"\";\n  left: 0;\n  opacity: 0;\n  overflow: hidden;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  top: 0;\n  transition: opacity 0.4s ease 0s;\n  z-index: 2;\n}\n.blog_thumb a::after {\n  bottom: 0;\n  color: #fff;\n  content: \"\";\n  font-family: FontAwesome;\n  font-size: 30px;\n  height: 30px;\n  left: 0;\n  line-height: 30px;\n  margin: auto;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  transform: scaleX(-1);\n  transition: transform 400ms ease 0s;\n  visibility: hidden;\n  width: 30px;\n  z-index: 11;\n}\n.blog_thumb a {\n  display: block;\n  overflow: hidden;\n}\n.blog_thumb a:hover::before {\n  opacity: 1;\n  visibility: visible;\n}\n.blog_thumb a:hover::after {\n  opacity: 1;\n  transform: scaleX(1);\n  visibility: visible;\n}\n.blog_thumb a img {\n  backface-visibility: hidden;\n  transition: opacity 0.5s ease 0s, transform 0.5s ease 0s;\n}\n.blog_thumb a:hover img {\n  transform: scale3d(1.1, 1.1, 1);\n}\n.blog_thumb .blogdate {\n  background: #fff none repeat scroll 0 0;\n  border-radius: 100%;\n  bottom: -12px;\n  color: #888888;\n  font-size: 13px;\n  height: 60px;\n  left: 0;\n  line-height: 1;\n  margin: 0 auto;\n  padding: 4px;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n  width: 60px;\n  z-index: 11;\n}\n.blog_thumb .blogdate div {\n  background: #39ADB4 none repeat scroll 0 0;\n  border-bottom: 2px solid #39ADB4;\n  border-radius: 100%;\n  color: #ffffff;\n  display: block;\n  font-size: 11px;\n  height: 100%;\n  text-align: center;\n  text-transform: uppercase;\n  width: 100%;\n}\n.blog_info {\n  margin: 20px 0 0;\n  position: relative;\n}\n.blog_info .post-title {\n  font-family: Open Sans,sans-serif;\n  font-size: 16px;\n  font-weight: 600;\n  text-transform: capitalize;\n  color: #333;    \n}\n.post-title > a {\n  color: #333333;\n}\n.blog_info .post-title a:hover {\n  color: #fa7c63;\n}\n.blog_thumb .blogdate div .day {\n  display: block;\n  font-family: Oswald, sans-serif;\n  font-size: 16px;\n  padding: 10px 0 3px;\n}\n.blog_info .post-excerpt {\n  clear: both;\n  margin: 10px 0;\n  color: #666\n}\n.blog_info .readmore-text {\n  font-weight: bold;\n  text-decoration: underline;\n}\n.blog_info .readmore-text:hover {\n  color: #fa7c63;\n}\n.indicator-brand-6.owl-theme .owl-controls .owl-buttons {\n  left: 9px;\n  position: absolute;\n  top: -98px;\n  width: 100%;\n}\n.indicator-brand-6.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 772px;\n  position: absolute;\n  right: 0;\n}\n/*----------------------------------------*/\n/*  13. Logo area\n/*----------------------------------------*/\n.main_brand {\n  margin-bottom: 10px;\n  padding: 14px;\n}\n.all_brand {\n  border: 1px solid#e1e1e1;\n}\n.all_brand.all_brand_zx.indicator-brand.indicator-brand-7.owl-carousel.owl-theme {\n  background: #ffffff none repeat scroll 0 0;\n}\n.brand_pix {\n  margin-bottom: 14px;\n  margin-top: 20px;\n}\n.brand {\n  margin-bottom: 18px;\n}\n.brand.brand-2.brand-3 {\n  margin-top: 15px;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons {\n  left: -2px;\n  position: absolute;\n  top: -105px;\n  width: 100%;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons div.owl-prev {\n  left: 1065px;\n  position: absolute;\n  right: 0;\n}\n.indicator-brand-7.owl-theme .owl-controls .owl-buttons div.owl-next {\n  right: -2px;\n}\n.main_brand.main_brand_tf {\n  margin-top: -13px;\n  padding: 28px;\n}\n\n\n\n/*----------------------------------------*/\n/*  24. Simple product area\n/*----------------------------------------*/\n.elv_heading h3{\n  font-weight: normal;\n}\n#gallery_new a {\n  padding-bottom: 15px;\n}\n.last_button_area_px{\n  margin: -14px 0 8px;\n}\n.cramb_area_5 > li::after {\n  content: \"\";\n}\n.cramb_area.cramb_area_5 {\n  margin-top: 20px;\n}\n.cramb_area_5{\n  border-bottom: 1px solid#e1e1e1;\n  margin-left: 4px;    \n}\n.cramb_area.cramb_area_2 {\n  border-bottom: 0 none;\n}\n.cramb_area.cramb_area_2 > li::after {\n  display: none;\n}\n.cramb_area.cramb_area_2.cramb_area_3 {\n  border-bottom: 1px solid #e1e1e1;\n}\n.shop_menu_2 ul li.br-active{\n  color: #39ADB4;\n}\n.zoomContainer {\n  border: 1px solid #e1e1e1;\n}\n#gallery_new a {\n  float: left;\n  width: 25%;\n  margin-top: 25px;    \n}\n.elavator_area {\n  overflow: hidden;\n  padding-bottom: 50px;\n}\n.evavet_description{\n  margin-top: 20px; \n}\n.elavetor_social {\n  border-top: 1px solid #d2d2d2;\n  margin: 15px 0 0;\n  padding: 15px 0 0;\n}\n.widget-title{\n  display: inline-block;\n  font-size: 11px;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n ul.social-link {\n  display: inline-block;\n  list-style: outside none none;\n  margin: 0 5px 5px 0;\n  padding: 0;\n}\n.social-link li{\n  display: inline-block;\n}\n.social-link li{\n  padding: 0 10px;\n}\n.old-.price-2{\n  font-size: 20px;\n  font-weight: 600;\n  color: #666;    \n}\n.spical-price-2{\n  color: #fa7c63;\n  font-size: 20px;\n  font-weight: 600;\n}\n.cart-btn-area{\n    margin: 20px 0;\n}\n.cart-btn-area > input[type=\"number\"] {\n  border: 1px solid #e1e1e1;\n  font-size: 15px;\n  height: 55px;\n  line-height: 55px;    \n  padding: 0 10px;\n  text-align: center;\n  width: 60px;\n  border-radius: 3px;    \n}\n.button_act.button_act_ct {\n  margin-bottom: 8px;\n}\nbutton.add-tocart {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  background: #467ecb none repeat scroll 0 0;\n  border-color: #3060a3;\n  border-image: none;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px 1px 2px;\n  box-shadow: none;\n  color: #ffffff;\n  display: inline-block;\n  font-family: Oswald,sans-serif;\n  font-size: 18px;\n  font-weight: normal;\n  height: 55px;\n  padding: 0 20px !important;\n  text-shadow: none;\n  text-transform: uppercase;\n  transition: all 0.3s ease 0s;\n  white-space: nowrap;\n  margin-left: 8px;    \n}\nbutton.add-tocart:hover{\n background: #39ADB4;\n color: #fff;\n border-color: #39ADB4;\n}\n.comapre_area {\n  margin-left: 21px;\n  margin-top: 10px;\n}\n.show-2 {\n  margin-left: 9px;\n}\n.new_meta {\n  border-top: 1px solid #d2d2d2;\n  margin: 20px 0 0;\n  padding: 10px 0 0;\n}\n .sku_wrapper {\n  display: block;\n  font-weight: bold;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n .sku_wrapper span {\n  font-weight: normal;\n  text-transform: none;\n}\n.tagged_as {\n  display: block;\n  font-weight: bold;\n  margin: 0 5px 5px 0;\n  text-transform: capitalize;\n}\n.tab_area_start {\n  padding: 50px 0;\n}\n.favtabs.favtabs-2 {\n  right: 954px;\n}\n.favtabs-2 > li {\n  margin: 2px;\n}\n.favtabs-2 > li > a {\n  background: #eee;    \n  height: 50px;\n  line-height: 50px;\n  padding: 0 18px;\n  text-transform: uppercase;\n  font-size: 16px;\n  font-family: Oswald,sans-serif;\n  font-weight: 300;    \n}\n.tb_desc{\n  border: 1px solid #e1e1e1;\n  border-radius: 0;\n  box-shadow: none;\n  padding: 20px;\n  margin-top: 7px;\n  text-align: left;\n  overflow: hidden;\n}\n.tb_desc > h2 {\n  font-size: 20px;\n  font-weight: normal;\n  margin: 0 0 20px;\n}\n.favtabs.favtabs-2::after {\n  background: #39ADB4 none repeat scroll 0 0;\n  color: #ff0000;\n  content: \"\";\n  height: 3px;\n  left: 2px;\n  position: absolute;\n  top: 50px;\n  width: 1140px;\n  z-index: 99999;\n}\n.another_icon.fa.fa-heart {\n  border: 2px solid #dedede;\n  border-radius: 3px;    \n  font-size: 18px;\n  height: 40px;\n  line-height: 37px;\n  margin-right: 8px;\n  text-align: center;\n  width: 40px;\n  margin-bottom: 10px; \n  color: #999999;  \n}  \n.add_defi > a:hover .another_icon.fa.fa-heart{\n   background: #39ADB4;\n   border: 2px solid #39ADB4;\n   color: #fff;    \n}\n.add_defi, .add_defi_2 > a {\n  font-weight: 400;\n  text-transform: uppercase;\n  font-family: Oswald,sans-serif;\n}\n.another_icon.fa.fa-refresh{\n  border: 2px solid #dedede;\n  border-radius: 3px;    \n  font-size: 18px;\n  height: 40px;\n  line-height: 37px;\n  margin-right: 8px;\n  text-align: center;\n  width: 40px;\n  color: #999999;    \n}\n.add_defi_2 > a:hover .another_icon.fa.fa-refresh{\n   background: #fa7c63;\n   border: 2px solid #fa7c63;\n   color: #fff;    \n}\n.review_area_heading #comnt h2{\n  font-size: 25px;\n  font-weight: normal;\n  margin: 0 0 20px;\n}\n.review_area_heading #comnt ol.commentlist li img.avatar {\n  background: #ebe9eb none repeat scroll 0 0;\n  border: 1px solid #e4e1e3;\n  box-shadow: none;\n  float: left;\n  height: auto;\n  left: 0;\n  margin: 0;\n  padding: 3px;\n  position: absolute;\n  top: 0;\n  width: 32px;\n}\n .review_area_heading #comnt ol.commentlist li .comment-text {\n  border: 1px solid #e4e1e3;\n  border-radius: 4px;\n  margin: 0 0 0 50px;\n  padding: 1em 1em 0;\n}\n.star-rating {\n  float: right;\n  font-size: 1em;\n  height: 1em;\n  line-height: 1;\n  overflow: hidden;\n  position: relative;\n  width: 5.4em;\n}\n.review_area_heading #comnt ol.commentlist {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  list-style: outside none none;\n  margin: 0;\n  width: 100%;\n}\n .review_area_heading #comnt ol.commentlist li {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 center;\n  border: 0 none;\n  margin: 0 0 20px;\n  padding: 0;\n  position: relative;\n}\n.review_area_heading #comnt ol.commentlist li img.avatar {\n  background: #ebe9eb none repeat scroll 0 0;\n  border: 1px solid #e4e1e3;\n  box-shadow: none;\n  float: left;\n  height: auto;\n  left: 0;\n  margin: 0;\n  padding: 3px;\n  position: absolute;\n  top: 0;\n  width: 32px;\n}\n.price_rating_2 > a > i {\n  color: #666;\n  font-size: 12px;\n}\n#comnt{\n float: left;\n width: 100%;\n padding-right: 20px;    \n}\n.review_form_area {\n  border-color: #e1e1e1;\n  border-style: solid;\n  border-width: 0 0 0 1px;\n  float: left;\n  padding: 0 0 0 30px;\n  width: 40%;\n}\n.revew_form_content {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  border: 0 none;\n  margin: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n #reply-title {\n  font-size: 20px;\n  font-weight: normal;\n  margin: 0 0 20px;\n} #commentform p label {\n  display: block;\n  font-weight: normal;\n}\n.price_rating_3 > a > i {\n  color:#666;\n  font-size: 14px;\n}\n.price_rating_3 > a > i:hover{\n    color: #fa7c63;\n}\n.mix_type input:not([type]), .mix_type input[type=\"text\"], .mix_type input[type=\"password\"], .mix_type input[type=\"date\"], .mix_type input[type=\"datetime\"], .mix_type input[type=\"datetime-local\"], .mix_type input[type=\"month\"], .mix_type input[type=\"week\"], .mix_type input[type=\"email\"], .mix_type input[type=\"number\"], .mix_type input[type=\"search\"], .mix_type input[type=\"tel\"], .mix_type input[type=\"time\"], .mix_type input[type=\"url\"], .mix_type input[type=\"color\"], textarea {\n  background: #fff none repeat scroll 0 0;\n  border: 1px solid #e1e1e1;\n  height: 40px;\n  padding: 5px;\n  transition: all 0.3s ease 0s;\n}\n#commentform input {\n  border: 1px solid #e1e1e1;\n  max-width: 500px;\n  padding: 5px 10px;\n  width: 100%;\n}\n #commentform p.form-submit input {\n  height: 35px;\n  line-height: 35px;\n  padding: 0 10px;\n}\n.revew_form_content textarea {\n  box-sizing: border-box;\n  width: 100%;\n}\n.revew_form_content #comment {\n  height: 75px;\n}\n.comment {\n  font-weight: normal;\n}\n #commentform p label {\n  display: block;\n  font-weight: normal;\n}\n.form-submit input{\n  border: none;\n  background-color: #ebe9eb;\n  font-weight: 700;\n  color: #515151;    \n}\n.form-submit input:hover {\n  background-color: #dad8da;\n  color: #515151;\n  text-decoration: none;\n}\n.price_rating.price_rating_2.price_rating_3 {\n  margin-top: -1px;\n  margin-bottom: 18px;    \n}\n.required_menu{\n  color: #666;\n}\n.comment-form-comment, .comment-form-author, .comment-form-email {\n  margin-bottom: 14px;\n}\n.brand.brand-2 {\n  margin-top: 0;\n}\n/*----------------------------------------*/\n/*  25. Variable product area\n/*----------------------------------------*/\n .bar_box_3 select {\n  border: 1px solid #eaeaea;\n  background-color: #f7f7f7;\n  color: #666;\n  height: 28px;\n  line-height: 28px;\n  width: 310px;\n  padding: 0 10px; \n  margin-left: 15px;     \n}\n.bar_box.bar_box_3 label{\n  font-weight: normal\n}\nform.cart {\n  margin: 20px 0;\n}\n.bar_box_4 select{\n  margin-left: 22px;\n  margin-bottom: 30px;\n} \n.favtabs.favtabs-2.favtabs-3 {\n  right: 731px;\n}\ntable.shop_attributes {\n  -moz-border-bottom-colors: none;\n  -moz-border-left-colors: none;\n  -moz-border-right-colors: none;\n  -moz-border-top-colors: none;\n  border-color: rgba(0, 0, 0, 0.1) -moz-use-text-color -moz-use-text-color;\n  border-image: none;\n  border-style: dotted none none;\n  border-width: 1px 0 0;\n  margin-bottom: 1.618em;\n  width: 100%;\n}\ntable.shop_attributes th {\n  font-weight: 700;\n  padding: 8px;\n  width: 150px;\n  border-bottom: 1px dotted rgba(0, 0, 0, 0.1);\n  border-top: 0 none;\n  line-height: 1.5;\n  margin: 0;    \n}\ntable.shop_attributes td {\n  font-style: italic;\n  padding: 0;\n}\ntable.shop_attributes td p {\n  margin: 0;\n  padding: 8px 0;\n}\ntable.shop_attributes .alt td, table.shop_attributes .alt th {\n  background: rgba(0, 0, 0, 0.024) none repeat scroll 0 0;\n}\ntable th, table td {\n  border-bottom: 1px solid #e1e1e1;\n  border-right: 1px solid #e1e1e1;\n  padding: 8px;\n}\n/*----------------------------------------*/\n/*  26. Grouped product area\n/*----------------------------------------*/\n.latest_es_from > input[type=\"number\"] {\n  border: 1px solid #e1e1e1;\n  font-size: 15px;\n  height: 55px;\n  line-height: 55px;    \n  padding: 0 10px;\n  text-align: center;\n  width: 60px;\n  border-radius: 3px;    \n}\n.price {\n  font-size: 16px;\n  font-weight: normal;\n  padding: 2px 5px 10px 216px;\n}\n.price ins {\n  background: rgba(0, 0, 0, 0) none repeat scroll 0 0;\n  color: #fa7c63;\n  font-weight: 600;\n}\n.al_df_frm{\n  border-bottom: 1px solid#e1e1e1;\n}\n.new_labl > a {\n  font-size: 14px;\n  font-weight: normal;\n  margin-left: 10px;\n}\nbutton.add-tocart-2 {\n margin-left: -3px;\n margin-top: 25px;\n}\n.price.price-2 {\n  margin-bottom: 10px;\n}\n.price.price_zx {\n  margin-left: -210px;\n}\n.dspc_area {\n  margin-bottom: 23px;\n  margin-left: 67px;\n  margin-top: -57px;\n}\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/sweetalert.css",
    "content": "body.stop-scrolling {\n  height: 100%;\n  overflow: hidden; }\n\n.sweet-overlay {\n  background-color: black;\n  /* IE8 */\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\";\n  /* IE8 */\n  background-color: rgba(0, 0, 0, 0.4);\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: none;\n  z-index: 10000; }\n\n.sweet-alert {\n  background-color: white;\n  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  width: 478px;\n  padding: 17px;\n  border-radius: 5px;\n  text-align: center;\n  position: fixed;\n  left: 50%;\n  top: 50%;\n  margin-left: -256px;\n  margin-top: -200px;\n  overflow: hidden;\n  display: none;\n  z-index: 99999; }\n  @media all and (max-width: 540px) {\n    .sweet-alert {\n      width: auto;\n      margin-left: 0;\n      margin-right: 0;\n      left: 15px;\n      right: 15px; } }\n  .sweet-alert h2 {\n    color: #575757;\n    font-size: 30px;\n    text-align: center;\n    font-weight: 600;\n    text-transform: none;\n    position: relative;\n    margin: 25px 0;\n    padding: 0;\n    line-height: 40px;\n    display: block; }\n  .sweet-alert p {\n    color: #797979;\n    font-size: 16px;\n    text-align: center;\n    font-weight: 300;\n    position: relative;\n    text-align: inherit;\n    float: none;\n    margin: 0;\n    padding: 0;\n    line-height: normal; }\n  .sweet-alert fieldset {\n    border: none;\n    position: relative; }\n  .sweet-alert .sa-error-container {\n    background-color: #f1f1f1;\n    margin-left: -17px;\n    margin-right: -17px;\n    overflow: hidden;\n    padding: 0 10px;\n    max-height: 0;\n    webkit-transition: padding 0.15s, max-height 0.15s;\n    transition: padding 0.15s, max-height 0.15s; }\n    .sweet-alert .sa-error-container.show {\n      padding: 10px 0;\n      max-height: 100px;\n      webkit-transition: padding 0.2s, max-height 0.2s;\n      transition: padding 0.25s, max-height 0.25s; }\n    .sweet-alert .sa-error-container .icon {\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background-color: #ea7d7d;\n      color: white;\n      line-height: 24px;\n      text-align: center;\n      margin-right: 3px; }\n    .sweet-alert .sa-error-container p {\n      display: inline-block; }\n  .sweet-alert .sa-input-error {\n    position: absolute;\n    top: 29px;\n    right: 26px;\n    width: 20px;\n    height: 20px;\n    opacity: 0;\n    -webkit-transform: scale(0.5);\n    transform: scale(0.5);\n    -webkit-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n    -webkit-transition: all 0.1s;\n    transition: all 0.1s; }\n    .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {\n      content: \"\";\n      width: 20px;\n      height: 6px;\n      background-color: #f06e57;\n      border-radius: 3px;\n      position: absolute;\n      top: 50%;\n      margin-top: -4px;\n      left: 50%;\n      margin-left: -9px; }\n    .sweet-alert .sa-input-error::before {\n      -webkit-transform: rotate(-45deg);\n      transform: rotate(-45deg); }\n    .sweet-alert .sa-input-error::after {\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n    .sweet-alert .sa-input-error.show {\n      opacity: 1;\n      -webkit-transform: scale(1);\n      transform: scale(1); }\n  .sweet-alert input {\n    width: 100%;\n    box-sizing: border-box;\n    border-radius: 3px;\n    border: 1px solid #d7d7d7;\n    height: 43px;\n    margin-top: 10px;\n    margin-bottom: 17px;\n    font-size: 18px;\n    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n    padding: 0 12px;\n    display: none;\n    -webkit-transition: all 0.3s;\n    transition: all 0.3s; }\n    .sweet-alert input:focus {\n      outline: none;\n      box-shadow: 0px 0px 3px #c4e6f5;\n      border: 1px solid #b4dbed; }\n      .sweet-alert input:focus::-moz-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus:-ms-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus::-webkit-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n    .sweet-alert input::-moz-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-ms-clear {\n      display: none; }\n    .sweet-alert input:-ms-input-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-webkit-input-placeholder {\n      color: #bdbdbd; }\n  .sweet-alert.show-input input {\n    display: block; }\n  .sweet-alert .sa-confirm-button-container {\n    display: inline-block;\n    position: relative; }\n  .sweet-alert .la-ball-fall {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    margin-left: -27px;\n    margin-top: 4px;\n    opacity: 0;\n    visibility: hidden; }\n  .sweet-alert button {\n    background-color: #8CD4F5;\n    color: white;\n    border: none;\n    box-shadow: none;\n    font-size: 17px;\n    font-weight: 500;\n    -webkit-border-radius: 4px;\n    border-radius: 5px;\n    padding: 10px 32px;\n    margin: 26px 5px 0 5px;\n    cursor: pointer; }\n    .sweet-alert button:focus {\n      outline: none;\n      box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }\n    .sweet-alert button:hover {\n      background-color: #7ecff4; }\n    .sweet-alert button:active {\n      background-color: #5dc2f1; }\n    .sweet-alert button.cancel {\n      background-color: #C1C1C1; }\n      .sweet-alert button.cancel:hover {\n        background-color: #b9b9b9; }\n      .sweet-alert button.cancel:active {\n        background-color: #a8a8a8; }\n      .sweet-alert button.cancel:focus {\n        box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }\n    .sweet-alert button[disabled] {\n      opacity: .6;\n      cursor: default; }\n    .sweet-alert button.confirm[disabled] {\n      color: transparent; }\n      .sweet-alert button.confirm[disabled] ~ .la-ball-fall {\n        opacity: 1;\n        visibility: visible;\n        transition-delay: 0s; }\n    .sweet-alert button::-moz-focus-inner {\n      border: 0; }\n  .sweet-alert[data-has-cancel-button=false] button {\n    box-shadow: none !important; }\n  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n    padding-bottom: 40px; }\n  .sweet-alert .sa-icon {\n    width: 80px;\n    height: 80px;\n    border: 4px solid gray;\n    -webkit-border-radius: 40px;\n    border-radius: 40px;\n    border-radius: 50%;\n    margin: 20px auto;\n    padding: 0;\n    position: relative;\n    box-sizing: content-box; }\n    .sweet-alert .sa-icon.sa-error {\n      border-color: #F27474; }\n      .sweet-alert .sa-icon.sa-error .sa-x-mark {\n        position: relative;\n        display: block; }\n      .sweet-alert .sa-icon.sa-error .sa-line {\n        position: absolute;\n        height: 5px;\n        width: 47px;\n        background-color: #F27474;\n        display: block;\n        top: 37px;\n        border-radius: 2px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n          left: 17px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n          right: 16px; }\n    .sweet-alert .sa-icon.sa-warning {\n      border-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-body {\n        position: absolute;\n        width: 5px;\n        height: 47px;\n        left: 50%;\n        top: 10px;\n        -webkit-border-radius: 2px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-dot {\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        -webkit-border-radius: 50%;\n        border-radius: 50%;\n        margin-left: -3px;\n        left: 50%;\n        bottom: 10px;\n        background-color: #F8BB86; }\n    .sweet-alert .sa-icon.sa-info {\n      border-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::before {\n        content: \"\";\n        position: absolute;\n        width: 5px;\n        height: 29px;\n        left: 50%;\n        bottom: 17px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::after {\n        content: \"\";\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        margin-left: -3px;\n        top: 19px;\n        background-color: #C9DAE1;\n        left: 50%; }\n    .sweet-alert .sa-icon.sa-success {\n      border-color: #A5DC86; }\n      .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {\n        content: '';\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        position: absolute;\n        width: 60px;\n        height: 120px;\n        background: white;\n        -webkit-transform: rotate(45deg);\n        transform: rotate(45deg); }\n      .sweet-alert .sa-icon.sa-success::before {\n        -webkit-border-radius: 120px 0 0 120px;\n        border-radius: 120px 0 0 120px;\n        top: -7px;\n        left: -33px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 60px 60px;\n        transform-origin: 60px 60px; }\n      .sweet-alert .sa-icon.sa-success::after {\n        -webkit-border-radius: 0 120px 120px 0;\n        border-radius: 0 120px 120px 0;\n        top: -11px;\n        left: 30px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 0px 60px;\n        transform-origin: 0px 60px; }\n      .sweet-alert .sa-icon.sa-success .sa-placeholder {\n        width: 80px;\n        height: 80px;\n        border: 4px solid rgba(165, 220, 134, 0.2);\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        box-sizing: content-box;\n        position: absolute;\n        left: -4px;\n        top: -4px;\n        z-index: 2; }\n      .sweet-alert .sa-icon.sa-success .sa-fix {\n        width: 5px;\n        height: 90px;\n        background-color: white;\n        position: absolute;\n        left: 28px;\n        top: 8px;\n        z-index: 1;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg); }\n      .sweet-alert .sa-icon.sa-success .sa-line {\n        height: 5px;\n        background-color: #A5DC86;\n        display: block;\n        border-radius: 2px;\n        position: absolute;\n        z-index: 2; }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n          width: 25px;\n          left: 14px;\n          top: 46px;\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg); }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n          width: 47px;\n          right: 8px;\n          top: 38px;\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg); }\n    .sweet-alert .sa-icon.sa-custom {\n      background-size: contain;\n      border-radius: 0;\n      border: none;\n      background-position: center center;\n      background-repeat: no-repeat; }\n\n/*\n * Animations\n */\n@-webkit-keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@-webkit-keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@-webkit-keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n@keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n.showSweetAlert[data-animation=pop] {\n  -webkit-animation: showSweetAlert 0.3s;\n  animation: showSweetAlert 0.3s; }\n\n.showSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.showSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideFromTop 0.3s;\n  animation: slideFromTop 0.3s; }\n\n.showSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideFromBottom 0.3s;\n  animation: slideFromBottom 0.3s; }\n\n.hideSweetAlert[data-animation=pop] {\n  -webkit-animation: hideSweetAlert 0.2s;\n  animation: hideSweetAlert 0.2s; }\n\n.hideSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.hideSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideToTop 0.4s;\n  animation: slideToTop 0.4s; }\n\n.hideSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideToBottom 0.3s;\n  animation: slideToBottom 0.3s; }\n\n@-webkit-keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@-webkit-keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n@keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n.animateSuccessTip {\n  -webkit-animation: animateSuccessTip 0.75s;\n  animation: animateSuccessTip 0.75s; }\n\n.animateSuccessLong {\n  -webkit-animation: animateSuccessLong 0.75s;\n  animation: animateSuccessLong 0.75s; }\n\n.sa-icon.sa-success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n  animation: rotatePlaceholder 4.25s ease-in; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n.animateErrorIcon {\n  -webkit-animation: animateErrorIcon 0.5s;\n  animation: animateErrorIcon 0.5s; }\n\n@-webkit-keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n@keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n.animateXMark {\n  -webkit-animation: animateXMark 0.5s;\n  animation: animateXMark 0.5s; }\n\n@-webkit-keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n@keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n.pulseWarning {\n  -webkit-animation: pulseWarning 0.75s infinite alternate;\n  animation: pulseWarning 0.75s infinite alternate; }\n\n@-webkit-keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n@keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n.pulseWarningIns {\n  -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n  animation: pulseWarningIns 0.75s infinite alternate; }\n\n@-webkit-keyframes rotate-loading {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n@keyframes rotate-loading {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n/* Internet Explorer 9 has some special quirks that are fixed here */\n/* The icons are not animated. */\n/* This file is automatically merged into sweet-alert.min.js through Gulp */\n/* Error icon */\n.sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/* Success icon */\n.sweet-alert .sa-icon.sa-success {\n  border-color: transparent\\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n.la-ball-fall,\n.la-ball-fall > div {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.la-ball-fall {\n  display: block;\n  font-size: 0;\n  color: #fff; }\n\n.la-ball-fall.la-dark {\n  color: #333; }\n\n.la-ball-fall > div {\n  display: inline-block;\n  float: none;\n  background-color: currentColor;\n  border: 0 solid currentColor; }\n\n.la-ball-fall {\n  width: 54px;\n  height: 18px; }\n\n.la-ball-fall > div {\n  width: 10px;\n  height: 10px;\n  margin: 4px;\n  border-radius: 100%;\n  opacity: 0;\n  -webkit-animation: ball-fall 1s ease-in-out infinite;\n  -moz-animation: ball-fall 1s ease-in-out infinite;\n  -o-animation: ball-fall 1s ease-in-out infinite;\n  animation: ball-fall 1s ease-in-out infinite; }\n\n.la-ball-fall > div:nth-child(1) {\n  -webkit-animation-delay: -200ms;\n  -moz-animation-delay: -200ms;\n  -o-animation-delay: -200ms;\n  animation-delay: -200ms; }\n\n.la-ball-fall > div:nth-child(2) {\n  -webkit-animation-delay: -100ms;\n  -moz-animation-delay: -100ms;\n  -o-animation-delay: -100ms;\n  animation-delay: -100ms; }\n\n.la-ball-fall > div:nth-child(3) {\n  -webkit-animation-delay: 0ms;\n  -moz-animation-delay: 0ms;\n  -o-animation-delay: 0ms;\n  animation-delay: 0ms; }\n\n.la-ball-fall.la-sm {\n  width: 26px;\n  height: 8px; }\n\n.la-ball-fall.la-sm > div {\n  width: 4px;\n  height: 4px;\n  margin: 2px; }\n\n.la-ball-fall.la-2x {\n  width: 108px;\n  height: 36px; }\n\n.la-ball-fall.la-2x > div {\n  width: 20px;\n  height: 20px;\n  margin: 8px; }\n\n.la-ball-fall.la-3x {\n  width: 162px;\n  height: 54px; }\n\n.la-ball-fall.la-3x > div {\n  width: 30px;\n  height: 30px;\n  margin: 12px; }\n\n/*\n * Animation\n */\n@-webkit-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@-moz-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -moz-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@-o-keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -o-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -o-transform: translateY(145%);\n    transform: translateY(145%); } }\n\n@keyframes ball-fall {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-145%);\n    -moz-transform: translateY(-145%);\n    -o-transform: translateY(-145%);\n    transform: translateY(-145%); }\n  10% {\n    opacity: .5; }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  80% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  90% {\n    opacity: .5; }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(145%);\n    -moz-transform: translateY(145%);\n    -o-transform: translateY(145%);\n    transform: translateY(145%); } }\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/css/templatemo-style.css",
    "content": "/*\n\nVisual Admin Template\nhttp://www.templatemo.com/preview/templatemo_455_visual_admin\n\nTABLE OF CONTENT\n\t1. Universal Styles\n\t2. Left Column\n\t3. Right Column\n\t4. Charts & Maps\n\t5. Login\n\t6. Manage Users\n\t7. Preferences\n\t8. Media Queries\n----------------------------------------------*/\n/* 1. Universal Styles\n----------------------------------------------*/\n* {\tfont-family: 'Open Sans', sans-serif; }\nbody {\tfont-size: 13px; }\nbody, .templatemo-left-nav { background: #1f2124; }\nh1, h2, h3 { margin: 0; }\nh2 { font-size: 1.6em; }\nh3 {\n\tcolor: #7f7f7f;\n\tfont-size: 1.4em;\n}\nul {\n\tlist-style-type: none;\n    margin: 0;\n    padding: 0;\n}\na:hover { text-decoration: none; }\nnav li {\n\tfont-size: 1.1em;\n\tlist-style: none;\t\n\ttext-transform: uppercase;\n}\n.templatemo-inline-block {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.templatemo-block {\tdisplay: block; }\n.templatemo-position-relative {\tposition: relative; }\n.blue-text { color: #39ADB4; }\n.white-text { color: white; }\n.green-bg {\tbackground-color: #39ADB4; }\n.yellow-bg { background-color: #D8D138; }\n.white-bg {\tbackground-color: white; }\n.white-bg .fa-times { background-color: #d7d7d7; }\n.white-bg .fa-times:hover {\tbackground: #83ccd1; }\n.orange-bg {\n\tbackground-color: #F17A54;\n\tcolor: white;\n}\n.orange-bg .fa-times {\tbackground-color: #F0A790; }\n.orange-bg .fa-times:hover { background-color: #E14311; }\n.pink-bg {\n\tbackground-color: #D7425C;\n\tcolor: white;\n}\n.pink-bg .fa-times { background-color: #E57C8F;\t}\n.pink-bg .fa-times:hover { background-color: #BD1F3B; }\n.blue-bg {\n\tbackground-color: #3275BB;\n\tcolor: white;\n}\n.blue-bg .fa-times { background-color: #6792C0; }\n.blue-bg .fa-times:hover { background-color: #2C639C; }\n.light-gray-bg { background-color: #efefef; }\n.padding-right-25 {\tpadding-right: 25px; }\n.margin-bottom-0 {\tmargin-bottom: 0; }\n.margin-bottom-5 {\tmargin-bottom: 5px; }\n.margin-bottom-10 {\tmargin-bottom: 10px; }\n.margin-bottom-30 {\tmargin-bottom: 30px; }\n.margin-bottom-70 {\tmargin-bottom: 70px; }\n.margin-right-15 { margin-right: 15px; }\n.margin-10 { margin: 10px; }\n.width-100 { width: 100%; }\n.no-border { border: none; }\n.border-radius-10 { border-radius: 10px; }\nfooter { padding: 15px; }\n\n/* 2. Left Column\n-----------------------------*/\n.templatemo-sidebar { width: 300px; }\n.square {\n\twidth: 25px;\n\theight: 25px;\n\tborder: 3px solid #13895F;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.circle {\n\twidth: 15px;\n\theight: 15px;\n\tborder-radius: 50%;\n}\n.templatemo-site-header { margin: 25px 30px; }\n.templatemo-site-header h1 {\n\tcolor: white;\n\tdisplay: inline-block;\n\tfont-size: 1.8em;\n\tfont-weight: 300;\n\tletter-spacing: 1.5px;\n\tmargin: 0 5px;\t\n\ttext-transform: uppercase;\n\tvertical-align: middle;\n}\n.profile-photo-container { position: relative; }\n.profile-photo-overlay {\n\tbackground-color: rgba(4, 152, 114, 0.35);\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: all 0.3s ease;\n}\n.profile-photo-overlay:hover { background-color: rgba(4, 152, 114, 0); }\n\n/* Search form */\n.templatemo-search-form {\n\tfont-size: 1.1em;\n\tmargin: 50px 20px;\t\t\n}\n.templatemo-search-form .input-group { width: 100%; }\n.templatemo-search-form .input-group .form-control {\n\tbackground-color: #18191b;\n\tborder: none;\n\tborder-radius: 10px;\n\tcolor: #DDD;\n\tpadding-left: 30px;\n}\n.form-control:focus {\n  border-color: #13895F;\n  outline: 0;\n  box-shadow: inset 0 1px 1px rgba(19,137,95,.075),0 0 8px rgba(19,137,95,.6);\n}\n.form-control.highlight {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n.form-control.highlight::-webkit-input-placeholder { /* WebKit browsers */\n    color:    #ccc;\n}\n.form-control.highlight:-moz-placeholder { /* Mozilla Firefox 4 to 18 */\n   color:    #ccc;\n   opacity:  1;\n}\n.form-control.highlight::-moz-placeholder { /* Mozilla Firefox 19+ */\n   color:    #ccc;\n   opacity:  1;\n}\n.form-control.highlight:-ms-input-placeholder { /* Internet Explorer 10+ */\n   color:    #ccc;\n}\n.templatemo-search-form .input-group { position: relative; }\n.fa-search {\n    height:32px;\n    width:32px;\n    border: none;\n    cursor: pointer;\n    color:white;\n    background:transparent;\n    position:absolute;\n    top: 0;\n\tleft: 0;\n\tz-index: 100;\n}\n.mobile-menu-icon { \n\tcursor:pointer;\n\tdisplay:none; \n}\n.templatemo-left-nav li { font-weight: 300; }\n.templatemo-left-nav a.active,\n.templatemo-left-nav a:hover {\n\tbackground: #18191b;\n\tborder-left: 8px solid #13895F;\n}\n.templatemo-left-nav a {\n\tcolor: #e9e9ea;\n\tdisplay: block;\n\tpadding: 30px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-left-nav .fa { margin-right: 15px; }\n\n/* 3. Right Column\n------------------------------*/\n.templatemo-top-nav-container {\n\tbackground-color: white;\n\tpadding: 28px 50px;\n \tbox-shadow: 0px 0px 2px 2px rgba(161, 159, 159, 0.18);\n}\n.templatemo-top-nav li {\n    float: left;\n    list-style: none;\n}\n.templatemo-top-nav a {\n\tcolor: #7f7f7f;\n    display: block;\n    padding: 0 50px;\n    border-left: 2px solid #c5c5c5;\n}\n.templatemo-top-nav li:last-child a { border-right: 2px solid #c5c5c5; }\n.templatemo-top-nav a:hover,\n.templatemo-top-nav a.active {\n\tcolor: #39ADB4;\n}\n\n/* Main Content Area */\n.templatemo-content {\n  margin-top: 0px;\n  min-height: 600px;\n  padding: 0;  \n  overflow-x: hidden;\n}\n.templatemo-content-container {\tpadding: 40px 50px; }\n.templatemo-flex-row {\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n}\n.col-1 {\n\t-webkit-flex: 1;\n\t    -ms-flex: 1;\n\t        flex: 1;\n}\n.col-2 {\n\t-webkit-flex: 2;\n\t    -ms-flex: 2;\n\t        flex: 2;\n}\n\n/* Content Widget */\n.templatemo-content-widget {\n\tborder-radius: 10px;\n\tpadding: 30px;\t\n\tposition: relative;\n\tmargin: 10px;\n \tbox-shadow: 0px 0px 1px 1px rgba(161, 159, 159, 0.1);\n}\n.templatemo-content-widget.no-padding {\tpadding: 0; }\n.fa-times {\n\tborder-radius: 15px;\n  \tcolor: white;\n  \tcursor: pointer;\n\tpadding: 4px 5px;\n  \tposition: absolute;\n  \ttop: 15px;\n  \tright: 15px;\n  \tz-index: 100;\n  \ttransition: all 0.3s ease;\n}\n.fa-heart {\n  color: white;\n  cursor: pointer;\n  font-size: 1.4em;\n  position: absolute;\n  top: 30px;\n  right: 30px;\n  z-index: 100;\n  transition: all 0.3s ease;\n}\n.fa-heart:hover { color: #39ADB4; }\n.progress {\tdisplay: block; }\n.panel-default>.panel-heading {\n\tbackground-color: #39ADB4;\n\tborder-top-left-radius: 10px;\n\tborder-top-right-radius: 10px;\n\tcolor: white;\n\tpadding: 15px;\n}\n.panel-default .fa-times {\n\ttop: 12px;\n\tbackground-color: #67B5B9;\n}\n.panel-default .fa-times:hover { background-color: #297B7F;\t}\n.panel { border-radius: 10px; }\n.pagination-wrap {\n\tmargin-right: 10px;\n\ttext-align: right;\n}\n.pagination>li>a {\n\tborder-color: #E9E8E8;\n\tcolor: #a6a6a6;\n\tmargin: 2px;\n\tpadding: 10px;\t\n}\n.pagination>li>a,\n.pagination>li:first-child>a,\n.pagination>li:last-child>a {\n\tborder-radius: 10px;\n}\n.pagination>.active>a, \n.pagination>.active>a:focus, \n.pagination>.active>a:hover {\n\tbackground-color: #39ADB4;\n\tborder-color: #E9E8E8;\n}\n.table { margin-bottom: 0; }\n.table>tbody>tr>td { padding: 10px 15px; }\n.table>thead>tr>td { padding: 15px; }\n.media { margin-top: 0; }\n.media-body { vertical-align: middle; }\n.badge {\n\tbackground-color: #d6973d;\n\tborder-radius: 5px;\n\tmargin-left: 5px;\n\tpadding: 5px 10px;\n\tvertical-align: top;\n}\n.templatemo-img-bordered {\n\tborder: 1px solid #ccc;\n\tpadding: 3px;\n}\n\n/* 4. Charts & Maps - http://codepen.io/shoogledesigns/pen/BfLkA\n----------------------------------------------------------------*/\n.templatemo-chart {\n\twidth: 100%;\n\theight: 300px;\n}\n#timeline_div {\theight: auto; }\n\n/* JQVMap */\n.jqvmap-zoomin, .jqvmap-zoomout {\n    width: 15px;\n    height: 15px;\n}\n.vmap { height: 300px; }\n\n/* 5. Login\n------------------------------*/\n.templatemo-login-widget {\n\tmax-width: 450px;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tpadding: 50px;\n}\n.templatemo-login-widget .square {\n\twidth: 18px;\n\theight: 18px;\n}\n.templatemo-login-widget header { margin-bottom: 40px; }\n.templatemo-login-widget h1 {\n\tdisplay: inline-block;\n\tfont-size: 1.8em;\n\ttext-align: center;\n\ttext-transform: uppercase;\n\tvertical-align: middle;\n}\n.templatemo-login-form .form-group { margin-bottom: 20px; }\n.templatemo-login-form .form-group:last-child {\tmargin-bottom: 0; }\n.input-group-addon { background: none; }\n.btn-primary {\n\tborder-radius: 2px;\n\tbackground-color: #39ADB4;\n\tborder: none;\t\n\tcolor: white;\t\n}\n.btn-primary:hover { background-color: #2A858B; }\n.templatemo-blue-button, \n.templatemo-white-button {\n\tborder-radius: 2px;\n\tpadding: 10px 30px;\n\ttext-transform: uppercase;\n\ttransition: all 0.3s ease;\n}\n.templatemo-blue-button {\n\tbackground-color: #39ADB4;\n\tborder: none;\t\n\tcolor: white;\t\n}\n.templatemo-blue-button:hover {\tbackground-color: #2A858B; }\n.templatemo-white-button {\n\tbackground-color: white;\n\tborder: 1px solid #39ADB4;\t\n\tcolor: #39ADB4;\t\n}\n.templatemo-white-button:hover { background-color: #eff2f3;\t}\n.templatemo-register-widget {\n\tmax-width: 450px;\n\tpadding: 15px;\n\ttext-align: center;\n}\n.templatemo-register-widget p {\tmargin-bottom: 0; }\n.checkbox label { padding-left: 0; }\n.font-weight-400 { font-weight: 400; }\n\n/* Style checkboxes and radio buttons\nhttp://webdesign.tutsplus.com/tutorials/quick-tip-easy-css3-checkboxes-and-radio-buttons--webdesign-8953 */\ninput[type=\"checkbox\"] {  display:none; }\ninput[type=\"checkbox\"] + label span {\n    display:inline-block;\n    width:26px;\n    height:25px;\n    margin:-1px 4px 0 0;\n    vertical-align:middle;\n    background:url(../image/checkbox-radio-sheet.png) left top no-repeat;\n    cursor:pointer;\n}\ninput[type=\"checkbox\"]:checked + label span {\n    background:url(../image/checkbox-radio-sheet.png) -26px top no-repeat;\n}\ninput[type=\"radio\"] { display:none; }\ninput[type=\"radio\"] + label span {\n    display:inline-block;\n    width:26px;\n    height:25px;\n    margin:-1px 4px 0 0;\n    vertical-align:middle;\n    background:url(../image/checkbox-radio-sheet.png) -52px top no-repeat;\n    cursor:pointer;\n}\ninput[type=\"radio\"]:checked + label span {\n    background:url(../image/checkbox-radio-sheet.png) -78px top no-repeat;\n}\n\n/* 6. Manage Users\n------------------------------*/\n.templatemo-sort-by:hover {\tcolor: #ded9d9; }\n.templatemo-edit-btn {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: black;\n    background: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-edit-btn:hover {\n\tbackground-color: #39ADB4;\n\tborder: 1px solid #39ADB4;\n\tcolor: white;\n}\n\n.templatemo-activity-btn {\n    border: 1px solid #ddd;\n    border-radius: 3px;\n    color: black;\n    background: white;\n    padding: 5px 15px;\n    transition: all 0.3s ease;\n}\n.templatemo-activity-btn:hover {\n    background-color: #39ADB4;\n    border: 1px solid #39ADB4;\n    color: white;\n}\n\n.description {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: black;\n\tbackground: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.description {\n\tbackground-color: #39ADB4;\n\tborder: 1px solid #39ADB4;\n\tcolor: white;\n}\n\n.templatemo-delete-btn {\n\tborder: 1px solid #ddd;\n\tborder-radius: 3px;\n\tcolor: red;\n    background: white;\n\tpadding: 5px 15px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-delete-btn:hover {\n\tbackground-color: red;\n\tborder: 1px solid red;\n\tcolor: white;\n}\n\n.templatemo-link { color: #607D8B; }\n.templatemo-link:hover { color: #39ADB4; }\n.templatemo-overflow-hidden { overflow: hidden; }\n.templatemo-user-table thead {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n.panel>.table-responsive:last-child>.table:last-child, .panel>.table:last-child {\n  border-bottom-right-radius: 10px;\n  border-bottom-left-radius: 10px;\n}\n.panel>.table:first-child {\n  border-top-left-radius: 10px;\n  border-top-right-radius: 10px;\n}\n.templatemo-social-icons-container {\n\tbackground-color: #f4f3f3;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-justify-content: space-between;\n\t    -ms-flex-pack: justify;\n\t        justify-content: space-between;\n\tbox-shadow: 0px 0px 1px 1px rgba(161, 159, 159, 0.1);\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 50px;\n\tborder-bottom-left-radius: 10px;\n\tborder-bottom-right-radius: 10px;\n\tborder-top: 1px solid #dedede;\n}\n.social-icon-wrap {\n\twidth: 33%;\n\theight: 100%;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-align-items: center;\n\t    -ms-flex-align: center;\n\t        align-items: center;\n\t-webkit-justify-content: center;\n\t    -ms-flex-pack: center;\n\t        justify-content: center;\n}\n.social-icon-wrap:nth-child(2) {\n\tborder-left: 1px solid #dedede;\n\tborder-right: 1px solid #dedede;\n}\n.templatemo-social-icon {\n\tbackground-color: #a6a6a6;\n\tborder-radius: 50%;\n\tcolor: white;\n\tcursor: pointer;\n\tfont-size: 1.5em;\n\tpadding-top: 8px;\n\twidth: 35px;\n\theight: 35px;\n\ttransition: all 0.3s ease;\n}\n.templatemo-social-icon:hover {\tbackground-color: #39ADB4; }\n.templatemo-content-img-bg {\n\tbackground-position: center;\n\tbackground-attachment: stretch;\n\tmin-height: 300px;\n}\n.content-bg-img {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tborder-radius: 10px;\n\twidth: 100%;\n\theight: 100%;\n}\n.view-img-btn-wrap {\n\tposition: absolute;\n\tbottom: 50px;\n\tleft: 0;\n\twidth: 100%;\n\ttext-align: center;\n}\n.templatemo-view-img-btn {\n\tbackground-color: #f4f3f3;\t\n\tborder: none;\n\tborder-radius: 5px;\n\tcolor: #a6a6a6;\n\tpadding: 10px 50px;\n\ttext-transform: uppercase;\n\ttransition: all 0.3s ease;\n}\n.templatemo-view-img-btn:hover {\n\tbackground-color: #39ADB4;\n\tcolor: white;\n}\n\n/* 7. Preferences\n-------------------------------*/\n.has-success .checkbox, .has-success .checkbox-inline, .has-success .control-label, .has-success .help-block, \n.has-success .radio, .has-success .radio-inline, .has-success.checkbox label, .has-success.checkbox-inline label, \n.has-success.radio label, .has-success.radio-inline label {\n\tcolor: #13895F;\n}\n.has-success .form-control { border-color: #13895F; }\n.has-warning .checkbox, .has-warning .checkbox-inline, .has-warning .control-label, .has-warning .help-block, \n.has-warning .radio, .has-warning .radio-inline, .has-warning.checkbox label, .has-warning.checkbox-inline label, \n.has-warning.radio label, .has-warning.radio-inline label {\n\tcolor: #CF922C;\n}\n.has-warning .form-control { border-color: #CF922C; }\n.has-error .checkbox, .has-error .checkbox-inline, .has-error .control-label, .has-error .help-block, \n.has-error .radio, .has-error .radio-inline, .has-error.checkbox label, .has-error.checkbox-inline label, \n.has-error.radio label, .has-error.radio-inline label {\n\tcolor: #D7425C;\n}\n.has-error .form-control { border-color: #D7425C; }\n.templatemo-multi-select {\n\tmin-width: 200px;\n\theight: 100px;\n\toverflow-y: scroll;\t\n}\n\n/* 8. Media Queries\n------------------------------*/\n@media screen and (max-width: 1199px) and (min-width: 991px) {\n\t.templatemo-site-header { margin: 25px; }\n\t.templatemo-sidebar { width: 250px;\t}\n\t.templatemo-search-form { margin: 20px; }\n\tnav li { font-size: 1em; }\n\t.templatemo-left-nav a { padding: 15px; }\n\t.templatemo-top-nav a { padding: 0 30px; }\n}\n\n@media screen and (max-width: 1199px) {\n\t.templatemo-flex-row.flex-content-row { display: block;\t}\n}\n\n@media screen and (max-width: 992px) and (min-width: 768px) {\n\t.templatemo-site-header,\n\t.templatemo-search-form { \n\t\tmargin: 15px; \n\t}\n\t.templatemo-sidebar { width: 200px; } \n\t.templatemo-site-header h1 { font-size: 1.6em; }\n\t.square { \n\t\twidth: 20px; \n\t\theight: 20px;\n\t}\n\t.templatemo-left-nav a.active,\n\t.templatemo-left-nav a:hover {\n\t\tborder-left: 6px solid #13895F;\t\t\n\t}\t\n\t.templatemo-top-nav-container {\tpadding: 17px 30px;\t}\n\t.templatemo-top-nav a { padding: 0 15px; }\n}\n\n@media screen and (max-width: 992px) {\n\tnav li { font-size: 1em; }\n\t.templatemo-left-nav a { padding: 15px 10px; }\t\n\t.templatemo-content-container {\tpadding: 10px; }\n}\n@media only screen and (min-width: 768px) {\n\t.templatemo-left-nav {\tdisplay: block !important; }\n}\n@media screen and (max-width: 767px) {\n\t.templatemo-flex-row { display: block; }\n\t.templatemo-site-header { margin: 20px 15px; }\n\t.profile-photo-container {\tdisplay: none; /* Hide profile photo on mobile view */\t}\n\t.templatemo-search-form { margin: 10px; }\n\t.templatemo-top-nav-container {\tpadding: 10px; }\n\t.templatemo-top-nav a { \n\t\tborder-left: 1px solid #c5c5c5;\n\t\tpadding: 0 7px; \n\t}\n\t.templatemo-top-nav li:last-child a { border-right: 1px solid #c5c5c5; }\n\t.templatemo-content-widget { padding: 15px;\t}\n\n\t/* Left column */\n\t.templatemo-left-nav {\n\t\tdisplay: none;\n\t\tposition: fixed;\n\t\ttop: 10px;\n\t\tright: 50px;\t\t\n\t\theight: 300px;\n\t\toverflow: auto;\n\t\twidth: 200px;\n\t\tz-index: 999;\n\t}\n\t.templatemo-left-nav a.active, \n\t.templatemo-left-nav a:hover {\n\t\tborder-left: 4px solid #13895F;\t\n\t}\n\t.mobile-menu-icon {\n\t\tcursor: pointer;\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\ttop: 10px;\n\t\tright: 10px;\n\t\tz-index: 1000;\n\t}\n\t.mobile-menu-icon:hover .fa { background-color: rgba(19,137,95,0.8); }\n\t.mobile-menu-icon .fa {\n\t\tcolor: #fff;\n\t\tbackground-color: rgba(19,137,95,0.4);\n\t\tfont-size: 1.5em;\n\t\twidth: 40px;\n\t\theight: 40px;\n\t\tpadding-top: 9px;\n\t\tpadding-left: 11px;\n\t}\n}\n\n.error-msg {\n\tcolor: #f30404 !important;\n\tfloat: right !important;\n}\n\n.page-info {\n\tfloat: left !important;\n\tmargin: 30px;\n}\n\n.li-none {\n    display: none !important;\n}\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/address.js",
    "content": "$(document).ready(function (){\n    var addresId;\n    $(\"[name='changeAddr']\").click(function (){\n        $(\"#update-addr\").modal({\n            backdrop:'static'\n        });\n\n        $(\"#name\").val($(this).parents(\"#parent\").find(\"#conname\").text());\n        $(\"#telephone\").val($(this).parents(\"#parent\").find(\"#contel\").text());\n        $(\"#detailaddress\").val($(this).parents(\"#parent\").find(\"#detailaddr\").text());\n         addresId=$(this).parents(\"#parent\").find(\"#table\").attr(\"address-id\");\n\n    });\n\n\n    $(\"#saveAddr\").click(function (){\n        var saveAddr={};\n        saveAddr.addressid=addresId;\n         saveAddr.province=$(\"#provinceUpdate\").val();\n         saveAddr.city=$(\"#cityUpdate\").val();\n         saveAddr.county=$(\"#countyUpdate\").val();\n         saveAddr.detailaddr=$(\"#detailaddress\").val();\n         saveAddr.conname=$(\"#name\").val();\n         saveAddr.contel=$(\"#telephone\").val();\n\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/saveAddr\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:saveAddr,\n            dateType:\"json\",\n            success: function(result){\n                if (result.msg==\"更新失败\")\n                {\n                    swal(result.msg);\n                }\n                else {\n                    $(\"#update-info\").modal('hide');\n                    swal(\"修改成功\", \"\", \"success\");\n                    $(\"button\").click(function (){\n                        location.reload();\n                    });\n                }\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    });\n\n    $(\"[name='deleteAddr']\").click(function (){\n        addresId=$(this).parents(\"#parent\").find(\"#table\").attr(\"address-id\");\n        var address={};\n        address.addressid=addresId;\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/deleteAddr\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:address,\n            dateType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"删除失败\");\n            }\n            });\n    });\n\n    $(\"[name='insertAddr']\").click(function () {\n        $(\"#insert-addr\").modal({\n            backdrop:'static'\n        });\n    });\n\n    $(\"#insertAddr\").click(function (){\n        var insertAddr={};\n        insertAddr.addressid={};\n        insertAddr.userid={};\n       insertAddr.province=$(\"#provinceInsert\").val();\n       insertAddr.city=$(\"#cityInsert\").val();\n        insertAddr.county=$(\"#countyInsert\").val();\n        insertAddr.detailaddr=$(\"#detailaddressInsert\").val();\n        insertAddr.conname=$(\"#nameInsert\").val();\n       insertAddr.contel=$(\"#telephoneInsert\").val();\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/insertAddr\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:insertAddr,\n           dataType:\"json\",\n           success:function (result){\n               swal(result.msg);\n               $(\"button\").click(function (){\n                   location.reload();\n               });\n           },\n           error:function (){\n               alert(\"添加失败\");\n           }\n       });\n\n    });\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/adminchat.js",
    "content": "/*\n/!**\n * Created by 文辉 on 2017/7/26.\n *!/\nvar client;\nvar clientID;\n$(window).on('beforeunload',function(){\n    client=null;\n    window.opener.document.getElementById(\"flag\").value=\"0\";\n});\n$(document).ready(function() {\n    clientID=$('#sendId').text();\n    client = new Messaging.Client('127.0.0.1',61614,clientID);\n    client.onConnectionLost = function(){\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function(message){\n\n        var userid = $(\"#receiveId\").text();\n        clientID = $('#sendId').text();\n        var msgObj=jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to===clientID&&msgObj.from===userid){\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n            /!*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*!/\n        }\n    };\n    //建立连接和订阅\n    client.connect({onSuccess:function(){\n        //订阅topic\n        client.subscribe(\"topic\");\n        // alert(\"连接成功\");\n    }});\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function() {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID=$('#sendId').text();\n            var msg={};\n            msg.from=clientID;\n            msg.to=$('#receiveId').text();\n            msg.body=message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function(request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function(data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n\n        }\n    });\n\n    //回车\n    $(document).keypress(function(e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function() {\n        $('.a-card').css(\"background\",\"#FFFFFF\")\n        $(this).css(\"background\",\"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function(request) {\n                alert(\"保存消息失败\");\n            },\n            success: function(result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n\n    $('.chat-list').hover(function() {\n        $(this).css(\"overflow-y\",\"auto\");\n    }, function() {\n        $(this).css(\"overflow-y\",\"hidden\");\n    });\n\n});\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index,item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n*/\n\n\nvar client;\nvar clientID;\n$(window).on('beforeunload', function () {\n    client = null;\n    window.opener.document.getElementById(\"flag\").value = \"0\";\n});\n$(document).ready(function () {\n\n    console.log(getChatList(2));\n    reGetChatUser($(\"#receiveId\").text());\n\n    clientID = $('#sendId').text();\n    client = new Messaging.Client('127.0.0.1', 61614, clientID);\n    client.onConnectionLost = function () {\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function (message) {\n        clientID = $('#sendId').text();\n        var userid = $(\"#receiveId\").text();\n        var msgObj = jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to === clientID && msgObj.from === userid) {\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n            /*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*/\n        } else if (msgObj.to === clientID && !getChatList(msgObj.from)) {\n            //重新获取聊天列表\n            reGetChatUser(msgObj.from);\n            // reGetChatUser(null);\n            /* var chatlistitem = '<a class=\"a-card\" data-userid=\"' + msgObj.from + '\"> <div class=\"card\">' + msgObj.from + '</div> </a>';\n             $('.a-far').prepend(chatlistitem);*/\n        }\n    };\n    //建立连接和订阅\n    client.connect({\n        onSuccess: function () {\n            //订阅topic\n            client.subscribe(\"topic\");\n            // alert(\"连接成功\");\n        }\n    });\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function () {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID = $('#sendId').text();\n            var msg = {};\n            msg.from = clientID;\n            msg.to = $('#receiveId').text();\n            msg.body = message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function (request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function (data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n            var receive = $(\"#receiveId\").text();\n            /*$.post(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             });\n             receive();\n             refreshList();*/\n            /*$.get(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             },\n             function(data,status){\n             alert(\"数据: \\n\" + data + \"\\n状态: \" + status);\n             });*/\n        }\n    });\n\n    //回车\n    $(document).keypress(function (e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function () {\n        $('.a-card').css(\"background\", \"#FFFFFF\")\n        $(this).css(\"background\", \"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function (request) {\n                alert(\"保存消息失败\");\n            },\n            success: function (result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n    /*function hitList(){\n     $('.list-item').css(\"background\",\"#FAFAFA\");\n     $(this).css(\"background\",\"#EBEBEC\");\n     var name = $(this).children(\"#user-name\").text();\n     var number = $(this).children(\"#user-no\").text();\n     $(\"#receive\").text(name);\n     $(\"#receiveId\").text(number);\n\n     }*/\n\n    $('.chat-list').hover(function () {\n        $(this).css(\"overflow-y\", \"auto\");\n    }, function () {\n        $(this).css(\"overflow-y\", \"hidden\");\n    });\n    //refreshList();\n\n});\n\nfunction userListClick() {\n\n    //发异步请求查聊天消息\n    $.ajax({\n        url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            senduser: $(\"#sendId\").text(),\n            receiveuser: $(\"#receiveId\").text(),\n        },\n        error: function (request) {\n            alert(\"保存消息失败\");\n        },\n        success: function (result) {\n            $('.chat-content-body').empty();\n            showMessage(result.info.message);\n            // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n        }\n    });\n}\n\n/*function receive(){\n var sendUser = $('#receiveId').text();\n $.post(\"servlet/ReceiveServlet\", {\n sendId: sendUser,\n },\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n $(\".chat-content-body\").html('');\n for (var i = 0; i < data.length; i++) {\n showMessage(data[i].User1,data[i].MsgContent);\n }\n },\"json\");\n }*/\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index, item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n//获取所有聊天列表\nfunction getChatList(id) {\n    var chatList = [];\n    $('.a-far>a').each(function () {\n        chatList.push($(this).attr(\"data-userid\"));\n    });\n    console.log(chatList);\n    for (var i = 0; i < chatList.length; i++) {\n        if (chatList[i] == id) {\n            return true;\n        }\n    }\n    return false;\n\n    /*$('.a-far').children().each(function(index,item){\n     alert(item.attr(\"data-userid\"));\n     })*/\n\n}\n\n//重新获取列表\nfunction reGetChatUser(sendto) {\n    $.ajax({\n        url: \"/shop/adminchat/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            sendto: sendto\n        },\n        error: function (request) {\n            alert(result.msg);\n        },\n        success: function (result) {\n            $('.a-far').empty();\n            showChatList(result.info.userlist);\n        }\n    });\n}\n\nfunction showChatList(userlist) {\n    $.each(userlist, function (index, item) {\n        var chatlistitemA = $(\"<a></a>\").addClass(\"a-card\").attr(\"data-userid\", item.userid).attr(\"data-username\", item.username);\n        var chatlistitem = chatlistitemA.addClass(\"card\").append(item.username);\n        chatlistitemA.click(function () {\n            $('.a-card').css(\"background\", \"#FFFFFF\")\n            $(this).css(\"background\", \"#F8F8F8\");\n            var userid = $(this).attr(\"data-userid\");\n            // var username = $(this).children(\".card\").text();\n            var username = $(this).attr(\"data-username\");\n            $(\"#receive\").text(username);\n            $(\"#receiveId\").text(userid);\n            userListClick();\n        });\n\n        /* <div class=\"card\">' + item.username + '</div>\n         *!/*/\n        $('.a-far').prepend(chatlistitem);\n    });\n}\n\n\n/*\n function refreshList() {\n $.post(\"servlet/RefreshServlet\",\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n //$(\".chat-list\").html('');\n for (var i = 0; i < data.length; i++) {\n // showList(data[i].UserId,data[i].Name);\n $('#list-item'+i).children(\"#user-name\").text(data[i].Name);\n $('#list-item'+i).children(\"#user-no\").text(data[i].UserId);\n $('#list-item'+i).css(\"display\",\"block\");\n }\n },\"json\");\n }\n\n function showList(id,name) {\n var item = '<div class=\"list-item\"><h3 id=\"user-name\">'+name+'</h3><span id=\"user-no\">'+id+'</span></div>';\n $('.chat-list').append(item);\n }*/\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/categery.js",
    "content": "$(document).ready(function (){\n    var cateId={};\n\n   $(\"[name='changCate']\") .click(function (){\n       $(\"#update-cate\").modal({\n           backdrop:'static'\n       });\n       $(\"#categoryName\").val($(this).parent().prev().children().text());\n       cateId=$(this).parent().prev().children().attr(\"cateId\");\n   });\n\n   $(\"#saveCatename\").click(function (){\n       var category={};\n       category.cateid=cateId;\n       category.catename=$(\"#categoryName\").val();\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/admin/goods/saveCate\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:category,\n           dataType:\"json\",\n           success:function (result){\n               if (result.msg==\"名字已经存在\")\n               {\n                   swal(result.msg);\n               }\n               else {\n                   swal(result.msg);\n                   $(\"button\").click(function (){\n                       location.reload();\n                   });\n               }\n           },\n           error:function (){\n               alert(\"更新失败\");\n           }\n       });\n   })\n    $(\"[name='deleteCate']\").click(function (){\n        var category={};\n        category.cateid=$(this).parent().prev().prev().children().attr(\"cateId\");\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/admin/goods/deleteCate\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:category,\n            dataType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    })\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/chat.js",
    "content": "$(document).ready(function(){\n\n\t$(\"#send-message\").click(function() {\n\t\tvar message = $(\"#input-message\").val();\n\t\tif (message !== '') {\n\t\t\t$(\"#input-message\").val('');\n\t\t\tvar element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + message + '</div> </div> </div>';z\n\t\t\tvar element_float = '<div class=\"clear-float\"></div>';\n\t\t\t$(\".chat-content-body\").append(element, element_float);\n\t\t\tsend(message, '123456');\n\t\t\t//始终保持滚动条滚动到最下方\n\t\t\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n\t\t}\n\t});\n\n\t//回车\n\t$(document).keypress(function(e) {\n\t\tif (e.which == 13) {\n\t\t\te.preventDefault();\n\t\t\tjQuery(\"#send-message\").click();\n\t\t}\n\t});\n\n\n\t/*var request = {\n\t    \"perception\": {\n\t        \"inputText\": {\n\t            \"text\": \"附近的酒店\"\n\t        },\n\t        \"selfInfo\": {\n\t            \"location\": {\n\t                \"city\": \"北京\",\n\t                \"latitude\": \"39.45492\",\n\t                \"longitude\": \"119.239293\",\n\t                \"nearest_poi_name\": \"上地环岛南\",\n\t                \"province\": \"北京\",\n\t                \"street\": \"信息路\"\n\t            },\n\t        }\n\t    },\n\t    \"userInfo\": {\n\t        \"apiKey\": \"0a1bfc7154e94d009460be836523c1d1\",\n\t        \"userId\": \"user\"\n\t    }\n\t};*/\n\n\n});\n\nfunction send(data,userid){\n\tvar request = {\n\t\t\"key\": \"0a1bfc7154e94d009460be836523c1d1\",\n\t\t\"info\": data,\n\t\t\"loc\": \"沈阳市浑南新区\",\n\t\t\"userid\": userid,\n\t};\n\n\t$.post('http://www.tuling123.com/openapi/api', request, \n\t\tfunction(data, status){\n\t\t\t// alert(data.code);\n\t\t\tif(data.code === 100000){\n\t\t\t\tshowMessage('123456', data.text);\n\t\t\t} else if(data.code === 200000) {\n\t\t\t\t//链接\n\t\t\t\tshowUrl(data.text, data.url);\n\t\t\t} else if(data.code === 302000) {\n\t\t\t\t//新闻\n\t\t\t\t// alert(data.list.length);\n\t\t\t\tfor(var i = 0; i<data.list.length; i++) {\n\t\t\t\t\tshowNews(data.list[i].article, data.list[i].source, data.list[i].detailurl);\n\t\t\t\t}\n\t\t\t} else if(data.code === 308000) {\n\t\t\t\t//菜谱,未完。。\n\t\t\t\tshowUrl(data.text, data.url);\n\t\t\t} else {\n\t\t\t\tshowMessage('123456', data.text);\n\t\t\t}\n\t\t\t\n\t\t},\"json\");\n}\n\nfunction showMessage(receiveName, message) {\n\t// $(\"#input-message\").val('');\n\tvar receiveId = $('#receiveId').text();\n\tvar element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + message + '</div> </div> </div>';\n\tvar element_float = '<div class=\"clear-float\"></div>';\n\t$(\".chat-content-body\").append(element, element_float);\n\n\t//始终保持滚动条滚动到最下方\n\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\nfunction showUrl(message, url) {\n\tvar element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + message + '&nbsp' + '<a href=\"'+ url +'\">点击查看</a>' +'</div> </div> </div>';\n\tvar element_float = '<div class=\"clear-float\"></div>';\n\t$(\".chat-content-body\").append(element, element_float);\n\n\t//始终保持滚动条滚动到最下方\n\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\nfunction showNews(article, source, detailurl) {\n\tvar element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + article + '<br />来源：'+ source + '<br /><a href=\"'+ detailurl +'\">查看详情</a>' +'</div> </div> </div>';\n\tvar element_float = '<div class=\"clear-float\"></div>';\n\t$(\".chat-content-body\").append(element, element_float);\n\n\t//始终保持滚动条滚动到最下方\n\t$(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/detail.js",
    "content": "/*\n  本网站效果由昆明天度网络IRIS原创制作，未经同意不得转载\n  商城用商品展示放大镜效果\n*/\njQuery.ljsGlasses = {\n    pcGlasses:function(_obj){\n\t\tvar _box = $(\"#\"+_obj.boxid);\n\t\tvar _sum = $(\"#\"+_obj.sumid);\n\t\tvar _last,_next;\n\t\tvar _imgarr = _box.find(\"img\");\n\t\tvar _length = _imgarr.length;\n\t\tvar _index = 0;\n\t\tvar _arr = new Array();\n\t\t_sum.append(\"<p style='position:absolute;left:0;top:0;'></p>\");\n\t\tvar _sumbox = _sum.find(\"p\");\n\t\t\n\t\tfor(var i=0;i<_length;i++){\n\t\t\t_arr[i] = new Array();\n\t\t\t_arr[i][0] = _imgarr.eq(i).attr(\"src\");\n\t\t\t_arr[i][1] = _imgarr.eq(i).attr(\"width\");\n\t\t\t_arr[i][2] = _imgarr.eq(i).attr(\"height\");\n\t\t\tvar _scale = _arr[i][1]/_arr[i][2];\n\t\t\tif(_scale == 1){\n\t\t\t\t_arr[i][3] = _obj.boxw;//width\n\t\t\t\t_arr[i][4] = _obj.boxh;//height\n\t\t\t\t_arr[i][5] = 0;//top\n\t\t\t\t_arr[i][6] = 0;//left\n\t\t\t\t_arr[i][7] = _obj.boxw/2;\n\t\t\t\t_arr[i][8] = _obj.boxw*2;//width\n\t\t\t\t_arr[i][9] = _obj.boxh*2;//height\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' width='\"+_obj.sumw+\"' height='\"+_obj.sumh+\"' /></span>\");\n\t\t\t\t}\n\t\t\tif(_scale > 1){\n\t\t\t\t_arr[i][3] = _obj.boxw;//width\n\t\t\t\t_arr[i][4] = _obj.boxw/_scale;\n\t\t\t\t_arr[i][5] = (_obj.boxh-_arr[i][4])/2;\n\t\t\t\t_arr[i][6] = 0;//left\n\t\t\t\t_arr[i][7] = _arr[i][4]/2;\n\t\t\t\t_arr[i][8] = _obj.boxh*2*_scale;//width\n\t\t\t\t_arr[i][9] = _obj.boxh*2;//height\n\t\t\t\tvar _place = _obj.sumh - (_obj.sumw/_scale);\n\t\t\t\t_place = _place/2;\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' width='\"+_obj.sumw+\"' style='top:\"+_place+\"px;' /></span>\");\n\t\t\t\t}\n\t\t\tif(_scale < 1){\n\t\t\t\t_arr[i][3] = _obj.boxh*_scale;//width\n\t\t\t\t_arr[i][4] = _obj.boxh;//height\n\t\t\t\t_arr[i][5] = 0;//top\n\t\t\t\t_arr[i][6] = (_obj.boxw-_arr[i][3])/2;\n\t\t\t\t_arr[i][7] = _arr[i][3]/2;\n\t\t\t\t_arr[i][8] = _obj.boxw*2;//width\n\t\t\t\t_arr[i][9] = _obj.boxw*2/_scale;\n\t\t\t\tvar _place = _obj.sumw - (_obj.sumh*_scale);\n\t\t\t\t_place = _place/2;\n\t\t\t\t_sumbox.append(\"<span><img src='\"+_imgarr.eq(i).attr(\"src\")+\"' height='\"+_obj.sumh+\"' style='left:\"+_place+\"px;' /></span>\");\n\t\t\t\t}\n\t\t}\n\t\t_imgarr.remove();\n\t\t\n\t\t_sum.append(\"<div style='clear:both;width:100%;'></div>\");\n\t\tvar _sumarr = _sum.find(\"span\");\n\t\tvar _sumimg = _sum.find(\"img\");\n\t\t_sumarr.eq(_index).addClass(_obj.sumsel);\n\t\tvar _border = _obj.sumborder*2 + _obj.sumh;\n\t\tvar _sumwidth = (_border+_obj.sumi)*_obj.sums;\n\t\tvar _sumboxwidth = (_border+_obj.sumi)*_length;\n\t\t_sum.css({\n\t\t\t\"overflow\":\"hidden\",\n\t\t\t\"height\":_border+\"px\",\n\t\t\t\"width\":_sumwidth+\"px\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t_sumbox.css({\n\t\t\t\"width\":_sumboxwidth+\"px\"\n\t\t\t});\n\t\t_sumarr.css({\n\t\t\t\"float\":\"left\",\n\t\t\t\"margin-left\":_obj.sumi+\"px\",\n\t\t\t\"width\":_obj.sumw+\"px\",\n\t\t\t\"height\":_obj.sumh+\"px\",\n\t\t\t\"overflow\":\"hidden\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t_sumimg.css({\n\t\t\t\"max-width\":\"100%\",\n\t\t\t\"max-height\":\"100%\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\t\n\t\t_box.append(\"<div style='position:relative;'><b style='display:block;'><img style='display:block;' src='' /></b><span style='position:absolute;left:0;top:0;display:none;z-index:5;'></span></div><p style='position:absolute;overflow:hidden;top:0;display:none;'><img style='max-width:none;max-height:none;position:relative;left:0;top:0;' src='' /></p>\");\n\t\tvar _glass = _box.find(\"span\");\n\t\tvar _boximg = _box.find(\"b img\");\n\t\tvar _imgout = _box.find(\"div\");\n\t\tvar _showbox = _box.find(\"p\");\n\t\tvar _showimg = _box.find(\"p img\");\n\n\t\t_box.css({\n\t\t\t\"width\":_obj.boxw+\"px\",\n\t\t\t\"height\":_obj.boxh+\"px\",\n\t\t\t\"position\":\"relative\"\n\t\t\t});\n\t\tvar _showboxleft = _obj.boxw + 10;\n\t\t_showbox.css({\n\t\t\t\"width\":_obj.boxw+\"px\",\n\t\t\t\"height\":_obj.boxh+\"px\",\n\t\t\t\"left\":_showboxleft+\"px\"\n\t\t\t});\n\t\t\n\t\tvar imgPlaces = function(){\n\t\t\t_showimg.attr(\"src\",_arr[_index][0]);\n\t\t\t_boximg.attr(\"src\",_arr[_index][0]);\n\t\t\t_boximg.css({\n\t\t\t    \"width\":_arr[_index][3]+\"px\",\n\t\t\t    \"height\":_arr[_index][4]+\"px\"\n\t\t\t});\n\t\t\t_imgout.css({\n\t\t\t\t\"width\":_arr[_index][3]+\"px\",\n\t\t\t    \"height\":_arr[_index][4]+\"px\",\n\t\t\t    \"top\":_arr[_index][5]+\"px\",\n\t\t\t    \"left\":_arr[_index][6]+\"px\",\n\t\t\t    \"position\":\"relative\"\n\t\t\t});\n\t\t\t_glass.css({\n\t\t\t    \"width\":_arr[_index][7]+\"px\",\n\t\t\t    \"height\":_arr[_index][7]+\"px\"\n\t\t\t});\n\t\t\t_showimg.css({\n\t\t\t\t\"width\":_arr[_index][8]+\"px\",\n\t\t\t    \"height\":_arr[_index][9]+\"px\"\n\t\t\t});\n\t\t\t\n\t\t};\n\t\timgPlaces();\n\t\t\n\t\t_imgout.mousemove(function(e){\n\t\t\tvar _gl_w = _glass.width()/2;\n\t\t\tvar _maxX = _imgout.width() - _gl_w;\n\t\t\tvar _maxY = _imgout.height() - _gl_w;\n\t\t\tvar _moveX = 0,_moveY = 0;\n\t\t\tvar _nowX = e.pageX - _imgout.offset().left;\n\t\t    var _nowY = e.pageY - _imgout.offset().top;\n\t\t\tvar _moveX = _nowX-_gl_w,_moveY = _nowY-_gl_w;\n\t\t\t\n\t\t\tif(_nowX <= _gl_w){ _moveX = 0; }\n\t\t\tif(_nowX >= _maxX){ _moveX = _maxX-_gl_w; }\n\t\t\tif(_nowY <= _gl_w){ _moveY = 0;}\n\t\t\tif(_nowY >= _maxY){ _moveY = _maxY-_gl_w;}\n\t\t\t_glass.css({\"left\":_moveX+\"px\",\"top\":_moveY+\"px\"});\n\n\t\t\tvar _imgX = -_moveX*_showbox.width()/_glass.width();\n\t\t\tvar _imgY = -_moveY*_showbox.width()/_glass.width();\n\t\t\t_showimg.css({\"left\":_imgX+\"px\",\"top\":_imgY+\"px\"});\n\t\n\t\t});//mouse END\n\t\t\n\t\t_imgout.mouseenter(function(){\n\t\t\t_glass.css(\"display\",\"block\");\n\t\t\t_showbox.css(\"display\",\"block\");\n\t\t\t});\n\t\t_imgout.mouseleave(function(){\n\t\t\t_glass.css(\"display\",\"none\");\n\t\t\t_showbox.css(\"display\",\"none\");\n\t\t\t});\n\t\t\n\t\t//列表部分\n\t\tvar _nextbtn = $(\"#\"+_obj.nextid);\n\t\tvar _lastbtn = $(\"#\"+_obj.lastid);\n\t\tvar _moveindex = 0;//索引移动\n\t\t\n\t\tvar _sumListMove = function(){\n\t\t\tvar _leftmove = -_moveindex*(_border+_obj.sumi);\n\t\t\tif(_sumbox.is(\":animated\")){_sumbox.stop(true,true);}\n\t\t\t_sumbox.animate({left:_leftmove+\"px\"},300);\n\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\timgPlaces();\n\t\t};//fun END\n\t\t\n\t\tif(_length <= _obj.sums){\n\t\t\tvar _place = (_obj.sums-_length)*_border/2;\n\t\t\t_sumbox.css(\"left\",_place+\"px\");\n\t\t\t_nextbtn.click(function(){\n\t\t\t\t_index++;\n\t\t\t\tif(_index >= _length){ _index=_length-1;}\n\t\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\t    imgPlaces();\n\t\t\t});\n\t\t\t_lastbtn.click(function(){\n\t\t\t\t_index--;\n\t\t\t\tif(_index <= 0){ _index=0;}\n\t\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\t    imgPlaces();\n\t\t\t});\n\t\t}else{\n\t\t\tvar _maxNum = _length-_obj.sums;\n\t\t\t_nextbtn.click(function(){\n\t\t\t   _moveindex++;\n\t\t\t   if(_moveindex >= _maxNum){ _moveindex=_maxNum; }\n\t\t\t   if(_index <= _moveindex){ _index=_moveindex;}\n\t\t\t   _sumListMove();\n\t\t    });\n\t\t\t_lastbtn.click(function(){\n\t\t\t\t_moveindex--;\n\t\t\t\tif(_moveindex <= 0){ _moveindex=0;}\n\t\t\t\tif(_index >= _moveindex+_obj.sums){ _index=_moveindex+_obj.sums-1;}\n\t\t\t\t_sumListMove();\n\t\t\t});\n\t\t}//if END\n\n\t\t_sumarr.hover(function(){\n\t\t\t_index = $(this).index();\n\t\t\t_sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);\n\t\t\timgPlaces();\n\t\t});\n\t\n  }//pcGlasses END\n}//ljsGlasses END"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/distpicker.js",
    "content": "/*!\n * Distpicker v2.0.0\n * https://github.com/fengyuanchen/distpicker\n *\n * Copyright (c) 2014-2017 Fengyuan Chen\n * Released under the MIT license\n *\n * Date: 2017-06-01T14:17:32.614Z\n */\n\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n  (factory(global.jQuery));\n}(this, (function ($) { 'use strict';\n\n$ = 'default' in $ ? $['default'] : $;\n\nvar DEFAULTS = {\n  // Selects the districts automatically.\n  // 0 -> Disable autoselect\n  // 1 -> Autoselect province only\n  // 2 -> Autoselect province and city only\n  // 3 -> Autoselect all (province, city and district)\n  autoselect: 0,\n\n  // Show placeholder.\n  placeholder: true,\n\n  // Select value. Options: 'name' and 'code'\n  valueType: 'name',\n\n  // Defines the initial value of province.\n  province: '—— 省 ——',\n\n  // Defines the initial value of city.\n  city: '—— 市 ——',\n\n  // Defines the initial value of district.\n  district: '—— 区 ——'\n};\n\nvar DISTRICTS = {\n  100000: {\n    110000: '北京市',\n    120000: '天津市',\n    130000: '河北省',\n    140000: '山西省',\n    150000: '内蒙古自治区',\n    210000: '辽宁省',\n    220000: '吉林省',\n    230000: '黑龙江省',\n    310000: '上海市',\n    320000: '江苏省',\n    330000: '浙江省',\n    340000: '安徽省',\n    350000: '福建省',\n    360000: '江西省',\n    370000: '山东省',\n    410000: '河南省',\n    420000: '湖北省',\n    430000: '湖南省',\n    440000: '广东省',\n    450000: '广西壮族自治区',\n    460000: '海南省',\n    500000: '重庆市',\n    510000: '四川省',\n    520000: '贵州省',\n    530000: '云南省',\n    540000: '西藏自治区',\n    610000: '陕西省',\n    620000: '甘肃省',\n    630000: '青海省',\n    640000: '宁夏回族自治区',\n    650000: '新疆维吾尔自治区',\n    710000: '台湾省',\n    810000: '香港特别行政区',\n    820000: '澳门特别行政区'\n  },\n  110000: {\n    110100: '北京市市辖区'\n  },\n  110100: {\n    110101: '东城区',\n    110102: '西城区',\n    110105: '朝阳区',\n    110106: '丰台区',\n    110107: '石景山区',\n    110108: '海淀区',\n    110109: '门头沟区',\n    110111: '房山区',\n    110112: '通州区',\n    110113: '顺义区',\n    110114: '昌平区',\n    110115: '大兴区',\n    110116: '怀柔区',\n    110117: '平谷区',\n    110118: '密云区',\n    110119: '延庆区'\n  },\n  120000: {\n    120100: '天津市市辖区'\n  },\n  120100: {\n    120101: '和平区',\n    120102: '河东区',\n    120103: '河西区',\n    120104: '南开区',\n    120105: '河北区',\n    120106: '红桥区',\n    120110: '东丽区',\n    120111: '西青区',\n    120112: '津南区',\n    120113: '北辰区',\n    120114: '武清区',\n    120115: '宝坻区',\n    120116: '滨海新区',\n    120117: '宁河区',\n    120118: '静海区',\n    120119: '蓟州区'\n  },\n  130000: {\n    130100: '石家庄市',\n    130200: '唐山市',\n    130300: '秦皇岛市',\n    130400: '邯郸市',\n    130500: '邢台市',\n    130600: '保定市',\n    130700: '张家口市',\n    130800: '承德市',\n    130900: '沧州市',\n    131000: '廊坊市',\n    131100: '衡水市'\n  },\n  130100: {\n    130102: '长安区',\n    130104: '桥西区',\n    130105: '新华区',\n    130107: '井陉矿区',\n    130108: '裕华区',\n    130109: '藁城区',\n    130110: '鹿泉区',\n    130111: '栾城区',\n    130121: '井陉县',\n    130123: '正定县',\n    130125: '行唐县',\n    130126: '灵寿县',\n    130127: '高邑县',\n    130128: '深泽县',\n    130129: '赞皇县',\n    130130: '无极县',\n    130131: '平山县',\n    130132: '元氏县',\n    130133: '赵县',\n    130181: '辛集市',\n    130183: '晋州市',\n    130184: '新乐市'\n  },\n  130200: {\n    130202: '路南区',\n    130203: '路北区',\n    130204: '古冶区',\n    130205: '开平区',\n    130207: '丰南区',\n    130208: '丰润区',\n    130209: '曹妃甸区',\n    130223: '滦县',\n    130224: '滦南县',\n    130225: '乐亭县',\n    130227: '迁西县',\n    130229: '玉田县',\n    130281: '遵化市',\n    130283: '迁安市'\n  },\n  130300: {\n    130302: '海港区',\n    130303: '山海关区',\n    130304: '北戴河区',\n    130306: '抚宁区',\n    130321: '青龙满族自治县',\n    130322: '昌黎县',\n    130324: '卢龙县'\n  },\n  130400: {\n    130402: '邯山区',\n    130403: '丛台区',\n    130404: '复兴区',\n    130406: '峰峰矿区',\n    130423: '临漳县',\n    130424: '成安县',\n    130425: '大名县',\n    130426: '涉县',\n    130427: '磁县',\n    130428: '肥乡区',\n    130429: '永年区',\n    130430: '邱县',\n    130431: '鸡泽县',\n    130432: '广平县',\n    130433: '馆陶县',\n    130434: '魏县',\n    130435: '曲周县',\n    130481: '武安市'\n  },\n  130500: {\n    130502: '桥东区',\n    130503: '桥西区',\n    130521: '邢台县',\n    130522: '临城县',\n    130523: '内丘县',\n    130524: '柏乡县',\n    130525: '隆尧县',\n    130526: '任县',\n    130527: '南和县',\n    130528: '宁晋县',\n    130529: '巨鹿县',\n    130530: '新河县',\n    130531: '广宗县',\n    130532: '平乡县',\n    130533: '威县',\n    130534: '清河县',\n    130535: '临西县',\n    130581: '南宫市',\n    130582: '沙河市'\n  },\n  130600: {\n    130602: '竞秀区',\n    130606: '莲池区',\n    130607: '满城区',\n    130608: '清苑区',\n    130609: '徐水区',\n    130623: '涞水县',\n    130624: '阜平县',\n    130626: '定兴县',\n    130627: '唐县',\n    130628: '高阳县',\n    130629: '容城县',\n    130630: '涞源县',\n    130631: '望都县',\n    130632: '安新县',\n    130633: '易县',\n    130634: '曲阳县',\n    130635: '蠡县',\n    130636: '顺平县',\n    130637: '博野县',\n    130638: '雄县',\n    130681: '涿州市',\n    130682: '定州市',\n    130683: '安国市',\n    130684: '高碑店市'\n  },\n  130700: {\n    130702: '桥东区',\n    130703: '桥西区',\n    130705: '宣化区',\n    130706: '下花园区',\n    130708: '万全区',\n    130709: '崇礼区',\n    130722: '张北县',\n    130723: '康保县',\n    130724: '沽源县',\n    130725: '尚义县',\n    130726: '蔚县',\n    130727: '阳原县',\n    130728: '怀安县',\n    130730: '怀来县',\n    130731: '涿鹿县',\n    130732: '赤城县'\n  },\n  130800: {\n    130802: '双桥区',\n    130803: '双滦区',\n    130804: '鹰手营子矿区',\n    130821: '承德县',\n    130822: '兴隆县',\n    130823: '平泉县',\n    130824: '滦平县',\n    130825: '隆化县',\n    130826: '丰宁满族自治县',\n    130827: '宽城满族自治县',\n    130828: '围场满族蒙古族自治县'\n  },\n  130900: {\n    130902: '新华区',\n    130903: '运河区',\n    130921: '沧县',\n    130922: '青县',\n    130923: '东光县',\n    130924: '海兴县',\n    130925: '盐山县',\n    130926: '肃宁县',\n    130927: '南皮县',\n    130928: '吴桥县',\n    130929: '献县',\n    130930: '孟村回族自治县',\n    130981: '泊头市',\n    130982: '任丘市',\n    130983: '黄骅市',\n    130984: '河间市'\n  },\n  131000: {\n    131002: '安次区',\n    131003: '广阳区',\n    131022: '固安县',\n    131023: '永清县',\n    131024: '香河县',\n    131025: '大城县',\n    131026: '文安县',\n    131028: '大厂回族自治县',\n    131081: '霸州市',\n    131082: '三河市'\n  },\n  131100: {\n    131102: '桃城区',\n    131103: '冀州区',\n    131121: '枣强县',\n    131122: '武邑县',\n    131123: '武强县',\n    131124: '饶阳县',\n    131125: '安平县',\n    131126: '故城县',\n    131127: '景县',\n    131128: '阜城县',\n    131182: '深州市'\n  },\n  140000: {\n    140100: '太原市',\n    140200: '大同市',\n    140300: '阳泉市',\n    140400: '长治市',\n    140500: '晋城市',\n    140600: '朔州市',\n    140700: '晋中市',\n    140800: '运城市',\n    140900: '忻州市',\n    141000: '临汾市',\n    141100: '吕梁市'\n  },\n  140100: {\n    140105: '小店区',\n    140106: '迎泽区',\n    140107: '杏花岭区',\n    140108: '尖草坪区',\n    140109: '万柏林区',\n    140110: '晋源区',\n    140121: '清徐县',\n    140122: '阳曲县',\n    140123: '娄烦县',\n    140181: '古交市'\n  },\n  140200: {\n    140202: '城区',\n    140203: '矿区',\n    140211: '南郊区',\n    140212: '新荣区',\n    140221: '阳高县',\n    140222: '天镇县',\n    140223: '广灵县',\n    140224: '灵丘县',\n    140225: '浑源县',\n    140226: '左云县',\n    140227: '大同县'\n  },\n  140300: {\n    140302: '城区',\n    140303: '矿区',\n    140311: '郊区',\n    140321: '平定县',\n    140322: '盂县'\n  },\n  140400: {\n    140402: '城区',\n    140411: '郊区',\n    140421: '长治县',\n    140423: '襄垣县',\n    140424: '屯留县',\n    140425: '平顺县',\n    140426: '黎城县',\n    140427: '壶关县',\n    140428: '长子县',\n    140429: '武乡县',\n    140430: '沁县',\n    140431: '沁源县',\n    140481: '潞城市'\n  },\n  140500: {\n    140502: '城区',\n    140521: '沁水县',\n    140522: '阳城县',\n    140524: '陵川县',\n    140525: '泽州县',\n    140581: '高平市'\n  },\n  140600: {\n    140602: '朔城区',\n    140603: '平鲁区',\n    140621: '山阴县',\n    140622: '应县',\n    140623: '右玉县',\n    140624: '怀仁县'\n  },\n  140700: {\n    140702: '榆次区',\n    140721: '榆社县',\n    140722: '左权县',\n    140723: '和顺县',\n    140724: '昔阳县',\n    140725: '寿阳县',\n    140726: '太谷县',\n    140727: '祁县',\n    140728: '平遥县',\n    140729: '灵石县',\n    140781: '介休市'\n  },\n  140800: {\n    140802: '盐湖区',\n    140821: '临猗县',\n    140822: '万荣县',\n    140823: '闻喜县',\n    140824: '稷山县',\n    140825: '新绛县',\n    140826: '绛县',\n    140827: '垣曲县',\n    140828: '夏县',\n    140829: '平陆县',\n    140830: '芮城县',\n    140881: '永济市',\n    140882: '河津市'\n  },\n  140900: {\n    140902: '忻府区',\n    140921: '定襄县',\n    140922: '五台县',\n    140923: '代县',\n    140924: '繁峙县',\n    140925: '宁武县',\n    140926: '静乐县',\n    140927: '神池县',\n    140928: '五寨县',\n    140929: '岢岚县',\n    140930: '河曲县',\n    140931: '保德县',\n    140932: '偏关县',\n    140981: '原平市'\n  },\n  141000: {\n    141002: '尧都区',\n    141021: '曲沃县',\n    141022: '翼城县',\n    141023: '襄汾县',\n    141024: '洪洞县',\n    141025: '古县',\n    141026: '安泽县',\n    141027: '浮山县',\n    141028: '吉县',\n    141029: '乡宁县',\n    141030: '大宁县',\n    141031: '隰县',\n    141032: '永和县',\n    141033: '蒲县',\n    141034: '汾西县',\n    141081: '侯马市',\n    141082: '霍州市'\n  },\n  141100: {\n    141102: '离石区',\n    141121: '文水县',\n    141122: '交城县',\n    141123: '兴县',\n    141124: '临县',\n    141125: '柳林县',\n    141126: '石楼县',\n    141127: '岚县',\n    141128: '方山县',\n    141129: '中阳县',\n    141130: '交口县',\n    141181: '孝义市',\n    141182: '汾阳市'\n  },\n  150000: {\n    150100: '呼和浩特市',\n    150200: '包头市',\n    150300: '乌海市',\n    150400: '赤峰市',\n    150500: '通辽市',\n    150600: '鄂尔多斯市',\n    150700: '呼伦贝尔市',\n    150800: '巴彦淖尔市',\n    150900: '乌兰察布市',\n    152200: '兴安盟',\n    152500: '锡林郭勒盟',\n    152900: '阿拉善盟'\n  },\n  150100: {\n    150102: '新城区',\n    150103: '回民区',\n    150104: '玉泉区',\n    150105: '赛罕区',\n    150121: '土默特左旗',\n    150122: '托克托县',\n    150123: '和林格尔县',\n    150124: '清水河县',\n    150125: '武川县'\n  },\n  150200: {\n    150202: '东河区',\n    150203: '昆都仑区',\n    150204: '青山区',\n    150205: '石拐区',\n    150206: '白云鄂博矿区',\n    150207: '九原区',\n    150221: '土默特右旗',\n    150222: '固阳县',\n    150223: '达尔罕茂明安联合旗'\n  },\n  150300: {\n    150302: '海勃湾区',\n    150303: '海南区',\n    150304: '乌达区'\n  },\n  150400: {\n    150402: '红山区',\n    150403: '元宝山区',\n    150404: '松山区',\n    150421: '阿鲁科尔沁旗',\n    150422: '巴林左旗',\n    150423: '巴林右旗',\n    150424: '林西县',\n    150425: '克什克腾旗',\n    150426: '翁牛特旗',\n    150428: '喀喇沁旗',\n    150429: '宁城县',\n    150430: '敖汉旗'\n  },\n  150500: {\n    150502: '科尔沁区',\n    150521: '科尔沁左翼中旗',\n    150522: '科尔沁左翼后旗',\n    150523: '开鲁县',\n    150524: '库伦旗',\n    150525: '奈曼旗',\n    150526: '扎鲁特旗',\n    150581: '霍林郭勒市'\n  },\n  150600: {\n    150602: '东胜区',\n    150603: '康巴什区',\n    150621: '达拉特旗',\n    150622: '准格尔旗',\n    150623: '鄂托克前旗',\n    150624: '鄂托克旗',\n    150625: '杭锦旗',\n    150626: '乌审旗',\n    150627: '伊金霍洛旗'\n  },\n  150700: {\n    150702: '海拉尔区',\n    150703: '扎赉诺尔区',\n    150721: '阿荣旗',\n    150722: '莫力达瓦达斡尔族自治旗',\n    150723: '鄂伦春自治旗',\n    150724: '鄂温克族自治旗',\n    150725: '陈巴尔虎旗',\n    150726: '新巴尔虎左旗',\n    150727: '新巴尔虎右旗',\n    150781: '满洲里市',\n    150782: '牙克石市',\n    150783: '扎兰屯市',\n    150784: '额尔古纳市',\n    150785: '根河市'\n  },\n  150800: {\n    150802: '临河区',\n    150821: '五原县',\n    150822: '磴口县',\n    150823: '乌拉特前旗',\n    150824: '乌拉特中旗',\n    150825: '乌拉特后旗',\n    150826: '杭锦后旗'\n  },\n  150900: {\n    150902: '集宁区',\n    150921: '卓资县',\n    150922: '化德县',\n    150923: '商都县',\n    150924: '兴和县',\n    150925: '凉城县',\n    150926: '察哈尔右翼前旗',\n    150927: '察哈尔右翼中旗',\n    150928: '察哈尔右翼后旗',\n    150929: '四子王旗',\n    150981: '丰镇市'\n  },\n  152200: {\n    152201: '乌兰浩特市',\n    152202: '阿尔山市',\n    152221: '科尔沁右翼前旗',\n    152222: '科尔沁右翼中旗',\n    152223: '扎赉特旗',\n    152224: '突泉县'\n  },\n  152500: {\n    152501: '二连浩特市',\n    152502: '锡林浩特市',\n    152522: '阿巴嘎旗',\n    152523: '苏尼特左旗',\n    152524: '苏尼特右旗',\n    152525: '东乌珠穆沁旗',\n    152526: '西乌珠穆沁旗',\n    152527: '太仆寺旗',\n    152528: '镶黄旗',\n    152529: '正镶白旗',\n    152530: '正蓝旗',\n    152531: '多伦县'\n  },\n  152900: {\n    152921: '阿拉善左旗',\n    152922: '阿拉善右旗',\n    152923: '额济纳旗'\n  },\n  210000: {\n    210100: '沈阳市',\n    210200: '大连市',\n    210300: '鞍山市',\n    210400: '抚顺市',\n    210500: '本溪市',\n    210600: '丹东市',\n    210700: '锦州市',\n    210800: '营口市',\n    210900: '阜新市',\n    211000: '辽阳市',\n    211100: '盘锦市',\n    211200: '铁岭市',\n    211300: '朝阳市',\n    211400: '葫芦岛市'\n  },\n  210100: {\n    210102: '和平区',\n    210103: '沈河区',\n    210104: '大东区',\n    210105: '皇姑区',\n    210106: '铁西区',\n    210111: '苏家屯区',\n    210112: '浑南区',\n    210113: '沈北新区',\n    210114: '于洪区',\n    210115: '辽中区',\n    210123: '康平县',\n    210124: '法库县',\n    210181: '新民市'\n  },\n  210200: {\n    210202: '中山区',\n    210203: '西岗区',\n    210204: '沙河口区',\n    210211: '甘井子区',\n    210212: '旅顺口区',\n    210213: '金州区',\n    210214: '普兰店区',\n    210224: '长海县',\n    210281: '瓦房店市',\n    210283: '庄河市'\n  },\n  210300: {\n    210302: '铁东区',\n    210303: '铁西区',\n    210304: '立山区',\n    210311: '千山区',\n    210321: '台安县',\n    210323: '岫岩满族自治县',\n    210381: '海城市'\n  },\n  210400: {\n    210402: '新抚区',\n    210403: '东洲区',\n    210404: '望花区',\n    210411: '顺城区',\n    210421: '抚顺县',\n    210422: '新宾满族自治县',\n    210423: '清原满族自治县'\n  },\n  210500: {\n    210502: '平山区',\n    210503: '溪湖区',\n    210504: '明山区',\n    210505: '南芬区',\n    210521: '本溪满族自治县',\n    210522: '桓仁满族自治县'\n  },\n  210600: {\n    210602: '元宝区',\n    210603: '振兴区',\n    210604: '振安区',\n    210624: '宽甸满族自治县',\n    210681: '东港市',\n    210682: '凤城市'\n  },\n  210700: {\n    210702: '古塔区',\n    210703: '凌河区',\n    210711: '太和区',\n    210726: '黑山县',\n    210727: '义县',\n    210781: '凌海市',\n    210782: '北镇市'\n  },\n  210800: {\n    210802: '站前区',\n    210803: '西市区',\n    210804: '鲅鱼圈区',\n    210811: '老边区',\n    210881: '盖州市',\n    210882: '大石桥市'\n  },\n  210900: {\n    210902: '海州区',\n    210903: '新邱区',\n    210904: '太平区',\n    210905: '清河门区',\n    210911: '细河区',\n    210921: '阜新蒙古族自治县',\n    210922: '彰武县'\n  },\n  211000: {\n    211002: '白塔区',\n    211003: '文圣区',\n    211004: '宏伟区',\n    211005: '弓长岭区',\n    211011: '太子河区',\n    211021: '辽阳县',\n    211081: '灯塔市'\n  },\n  211100: {\n    211102: '双台子区',\n    211103: '兴隆台区',\n    211104: '大洼区',\n    211122: '盘山县'\n  },\n  211200: {\n    211202: '银州区',\n    211204: '清河区',\n    211221: '铁岭县',\n    211223: '西丰县',\n    211224: '昌图县',\n    211281: '调兵山市',\n    211282: '开原市'\n  },\n  211300: {\n    211302: '双塔区',\n    211303: '龙城区',\n    211321: '朝阳县',\n    211322: '建平县',\n    211324: '喀喇沁左翼蒙古族自治县',\n    211381: '北票市',\n    211382: '凌源市'\n  },\n  211400: {\n    211402: '连山区',\n    211403: '龙港区',\n    211404: '南票区',\n    211421: '绥中县',\n    211422: '建昌县',\n    211481: '兴城市'\n  },\n  220000: {\n    220100: '长春市',\n    220200: '吉林市',\n    220300: '四平市',\n    220400: '辽源市',\n    220500: '通化市',\n    220600: '白山市',\n    220700: '松原市',\n    220800: '白城市',\n    222400: '延边朝鲜族自治州'\n  },\n  220100: {\n    220102: '南关区',\n    220103: '宽城区',\n    220104: '朝阳区',\n    220105: '二道区',\n    220106: '绿园区',\n    220112: '双阳区',\n    220113: '九台区',\n    220122: '农安县',\n    220182: '榆树市',\n    220183: '德惠市'\n  },\n  220200: {\n    220202: '昌邑区',\n    220203: '龙潭区',\n    220204: '船营区',\n    220211: '丰满区',\n    220221: '永吉县',\n    220281: '蛟河市',\n    220282: '桦甸市',\n    220283: '舒兰市',\n    220284: '磐石市'\n  },\n  220300: {\n    220302: '铁西区',\n    220303: '铁东区',\n    220322: '梨树县',\n    220323: '伊通满族自治县',\n    220381: '公主岭市',\n    220382: '双辽市'\n  },\n  220400: {\n    220402: '龙山区',\n    220403: '西安区',\n    220421: '东丰县',\n    220422: '东辽县'\n  },\n  220500: {\n    220502: '东昌区',\n    220503: '二道江区',\n    220521: '通化县',\n    220523: '辉南县',\n    220524: '柳河县',\n    220581: '梅河口市',\n    220582: '集安市'\n  },\n  220600: {\n    220602: '浑江区',\n    220605: '江源区',\n    220621: '抚松县',\n    220622: '靖宇县',\n    220623: '长白朝鲜族自治县',\n    220681: '临江市'\n  },\n  220700: {\n    220702: '宁江区',\n    220721: '前郭尔罗斯蒙古族自治县',\n    220722: '长岭县',\n    220723: '乾安县',\n    220781: '扶余市'\n  },\n  220800: {\n    220802: '洮北区',\n    220821: '镇赉县',\n    220822: '通榆县',\n    220881: '洮南市',\n    220882: '大安市'\n  },\n  222400: {\n    222401: '延吉市',\n    222402: '图们市',\n    222403: '敦化市',\n    222404: '珲春市',\n    222405: '龙井市',\n    222406: '和龙市',\n    222424: '汪清县',\n    222426: '安图县'\n  },\n  230000: {\n    230100: '哈尔滨市',\n    230200: '齐齐哈尔市',\n    230300: '鸡西市',\n    230400: '鹤岗市',\n    230500: '双鸭山市',\n    230600: '大庆市',\n    230700: '伊春市',\n    230800: '佳木斯市',\n    230900: '七台河市',\n    231000: '牡丹江市',\n    231100: '黑河市',\n    231200: '绥化市',\n    232700: '大兴安岭地区'\n  },\n  230100: {\n    230102: '道里区',\n    230103: '南岗区',\n    230104: '道外区',\n    230108: '平房区',\n    230109: '松北区',\n    230110: '香坊区',\n    230111: '呼兰区',\n    230112: '阿城区',\n    230113: '双城区',\n    230123: '依兰县',\n    230124: '方正县',\n    230125: '宾县',\n    230126: '巴彦县',\n    230127: '木兰县',\n    230128: '通河县',\n    230129: '延寿县',\n    230183: '尚志市',\n    230184: '五常市'\n  },\n  230200: {\n    230202: '龙沙区',\n    230203: '建华区',\n    230204: '铁锋区',\n    230205: '昂昂溪区',\n    230206: '富拉尔基区',\n    230207: '碾子山区',\n    230208: '梅里斯达斡尔族区',\n    230221: '龙江县',\n    230223: '依安县',\n    230224: '泰来县',\n    230225: '甘南县',\n    230227: '富裕县',\n    230229: '克山县',\n    230230: '克东县',\n    230231: '拜泉县',\n    230281: '讷河市'\n  },\n  230300: {\n    230302: '鸡冠区',\n    230303: '恒山区',\n    230304: '滴道区',\n    230305: '梨树区',\n    230306: '城子河区',\n    230307: '麻山区',\n    230321: '鸡东县',\n    230381: '虎林市',\n    230382: '密山市'\n  },\n  230400: {\n    230402: '向阳区',\n    230403: '工农区',\n    230404: '南山区',\n    230405: '兴安区',\n    230406: '东山区',\n    230407: '兴山区',\n    230421: '萝北县',\n    230422: '绥滨县'\n  },\n  230500: {\n    230502: '尖山区',\n    230503: '岭东区',\n    230505: '四方台区',\n    230506: '宝山区',\n    230521: '集贤县',\n    230522: '友谊县',\n    230523: '宝清县',\n    230524: '饶河县'\n  },\n  230600: {\n    230602: '萨尔图区',\n    230603: '龙凤区',\n    230604: '让胡路区',\n    230605: '红岗区',\n    230606: '大同区',\n    230621: '肇州县',\n    230622: '肇源县',\n    230623: '林甸县',\n    230624: '杜尔伯特蒙古族自治县'\n  },\n  230700: {\n    230702: '伊春区',\n    230703: '南岔区',\n    230704: '友好区',\n    230705: '西林区',\n    230706: '翠峦区',\n    230707: '新青区',\n    230708: '美溪区',\n    230709: '金山屯区',\n    230710: '五营区',\n    230711: '乌马河区',\n    230712: '汤旺河区',\n    230713: '带岭区',\n    230714: '乌伊岭区',\n    230715: '红星区',\n    230716: '上甘岭区',\n    230722: '嘉荫县',\n    230781: '铁力市'\n  },\n  230800: {\n    230803: '向阳区',\n    230804: '前进区',\n    230805: '东风区',\n    230811: '郊区',\n    230822: '桦南县',\n    230826: '桦川县',\n    230828: '汤原县',\n    230881: '同江市',\n    230882: '富锦市',\n    230883: '抚远市'\n  },\n  230900: {\n    230902: '新兴区',\n    230903: '桃山区',\n    230904: '茄子河区',\n    230921: '勃利县'\n  },\n  231000: {\n    231002: '东安区',\n    231003: '阳明区',\n    231004: '爱民区',\n    231005: '西安区',\n    231025: '林口县',\n    231081: '绥芬河市',\n    231083: '海林市',\n    231084: '宁安市',\n    231085: '穆棱市',\n    231086: '东宁市'\n  },\n  231100: {\n    231102: '爱辉区',\n    231121: '嫩江县',\n    231123: '逊克县',\n    231124: '孙吴县',\n    231181: '北安市',\n    231182: '五大连池市'\n  },\n  231200: {\n    231202: '北林区',\n    231221: '望奎县',\n    231222: '兰西县',\n    231223: '青冈县',\n    231224: '庆安县',\n    231225: '明水县',\n    231226: '绥棱县',\n    231281: '安达市',\n    231282: '肇东市',\n    231283: '海伦市'\n  },\n  232700: {\n    232701: '加格达奇区',\n    232721: '呼玛县',\n    232722: '塔河县',\n    232723: '漠河县'\n  },\n  310000: {\n    310100: '上海市市辖区'\n  },\n  310100: {\n    310101: '黄浦区',\n    310104: '徐汇区',\n    310105: '长宁区',\n    310106: '静安区',\n    310107: '普陀区',\n    310109: '虹口区',\n    310110: '杨浦区',\n    310112: '闵行区',\n    310113: '宝山区',\n    310114: '嘉定区',\n    310115: '浦东新区',\n    310116: '金山区',\n    310117: '松江区',\n    310118: '青浦区',\n    310120: '奉贤区',\n    310151: '崇明区'\n  },\n  320000: {\n    320100: '南京市',\n    320200: '无锡市',\n    320300: '徐州市',\n    320400: '常州市',\n    320500: '苏州市',\n    320600: '南通市',\n    320700: '连云港市',\n    320800: '淮安市',\n    320900: '盐城市',\n    321000: '扬州市',\n    321100: '镇江市',\n    321200: '泰州市',\n    321300: '宿迁市'\n  },\n  320100: {\n    320102: '玄武区',\n    320104: '秦淮区',\n    320105: '建邺区',\n    320106: '鼓楼区',\n    320111: '浦口区',\n    320113: '栖霞区',\n    320114: '雨花台区',\n    320115: '江宁区',\n    320116: '六合区',\n    320117: '溧水区',\n    320118: '高淳区'\n  },\n  320200: {\n    320205: '锡山区',\n    320206: '惠山区',\n    320211: '滨湖区',\n    320213: '梁溪区',\n    320214: '新吴区',\n    320281: '江阴市',\n    320282: '宜兴市'\n  },\n  320300: {\n    320302: '鼓楼区',\n    320303: '云龙区',\n    320305: '贾汪区',\n    320311: '泉山区',\n    320312: '铜山区',\n    320321: '丰县',\n    320322: '沛县',\n    320324: '睢宁县',\n    320381: '新沂市',\n    320382: '邳州市'\n  },\n  320400: {\n    320402: '天宁区',\n    320404: '钟楼区',\n    320411: '新北区',\n    320412: '武进区',\n    320413: '金坛区',\n    320481: '溧阳市'\n  },\n  320500: {\n    320505: '虎丘区',\n    320506: '吴中区',\n    320507: '相城区',\n    320508: '姑苏区',\n    320509: '吴江区',\n    320581: '常熟市',\n    320582: '张家港市',\n    320583: '昆山市',\n    320585: '太仓市'\n  },\n  320600: {\n    320602: '崇川区',\n    320611: '港闸区',\n    320612: '通州区',\n    320621: '海安县',\n    320623: '如东县',\n    320681: '启东市',\n    320682: '如皋市',\n    320684: '海门市'\n  },\n  320700: {\n    320703: '连云区',\n    320706: '海州区',\n    320707: '赣榆区',\n    320722: '东海县',\n    320723: '灌云县',\n    320724: '灌南县'\n  },\n  320800: {\n    320802: '清江浦区',\n    320803: '淮安区',\n    320804: '淮阴区',\n    320813: '洪泽区',\n    320826: '涟水县',\n    320830: '盱眙县',\n    320831: '金湖县'\n  },\n  320900: {\n    320902: '亭湖区',\n    320903: '盐都区',\n    320904: '大丰区',\n    320921: '响水县',\n    320922: '滨海县',\n    320923: '阜宁县',\n    320924: '射阳县',\n    320925: '建湖县',\n    320981: '东台市'\n  },\n  321000: {\n    321002: '广陵区',\n    321003: '邗江区',\n    321012: '江都区',\n    321023: '宝应县',\n    321081: '仪征市',\n    321084: '高邮市'\n  },\n  321100: {\n    321102: '京口区',\n    321111: '润州区',\n    321112: '丹徒区',\n    321181: '丹阳市',\n    321182: '扬中市',\n    321183: '句容市'\n  },\n  321200: {\n    321202: '海陵区',\n    321203: '高港区',\n    321204: '姜堰区',\n    321281: '兴化市',\n    321282: '靖江市',\n    321283: '泰兴市'\n  },\n  321300: {\n    321302: '宿城区',\n    321311: '宿豫区',\n    321322: '沭阳县',\n    321323: '泗阳县',\n    321324: '泗洪县'\n  },\n  330000: {\n    330100: '杭州市',\n    330200: '宁波市',\n    330300: '温州市',\n    330400: '嘉兴市',\n    330500: '湖州市',\n    330600: '绍兴市',\n    330700: '金华市',\n    330800: '衢州市',\n    330900: '舟山市',\n    331000: '台州市',\n    331100: '丽水市'\n  },\n  330100: {\n    330102: '上城区',\n    330103: '下城区',\n    330104: '江干区',\n    330105: '拱墅区',\n    330106: '西湖区',\n    330108: '滨江区',\n    330109: '萧山区',\n    330110: '余杭区',\n    330111: '富阳区',\n    330122: '桐庐县',\n    330127: '淳安县',\n    330182: '建德市',\n    330185: '临安市'\n  },\n  330200: {\n    330203: '海曙区',\n    330205: '江北区',\n    330206: '北仑区',\n    330211: '镇海区',\n    330212: '鄞州区',\n    330225: '象山县',\n    330226: '宁海县',\n    330281: '余姚市',\n    330282: '慈溪市',\n    330283: '奉化区'\n  },\n  330300: {\n    330302: '鹿城区',\n    330303: '龙湾区',\n    330304: '瓯海区',\n    330305: '洞头区',\n    330324: '永嘉县',\n    330326: '平阳县',\n    330327: '苍南县',\n    330328: '文成县',\n    330329: '泰顺县',\n    330381: '瑞安市',\n    330382: '乐清市'\n  },\n  330400: {\n    330402: '南湖区',\n    330411: '秀洲区',\n    330421: '嘉善县',\n    330424: '海盐县',\n    330481: '海宁市',\n    330482: '平湖市',\n    330483: '桐乡市'\n  },\n  330500: {\n    330502: '吴兴区',\n    330503: '南浔区',\n    330521: '德清县',\n    330522: '长兴县',\n    330523: '安吉县'\n  },\n  330600: {\n    330602: '越城区',\n    330603: '柯桥区',\n    330604: '上虞区',\n    330624: '新昌县',\n    330681: '诸暨市',\n    330683: '嵊州市'\n  },\n  330700: {\n    330702: '婺城区',\n    330703: '金东区',\n    330723: '武义县',\n    330726: '浦江县',\n    330727: '磐安县',\n    330781: '兰溪市',\n    330782: '义乌市',\n    330783: '东阳市',\n    330784: '永康市'\n  },\n  330800: {\n    330802: '柯城区',\n    330803: '衢江区',\n    330822: '常山县',\n    330824: '开化县',\n    330825: '龙游县',\n    330881: '江山市'\n  },\n  330900: {\n    330902: '定海区',\n    330903: '普陀区',\n    330921: '岱山县',\n    330922: '嵊泗县'\n  },\n  331000: {\n    331002: '椒江区',\n    331003: '黄岩区',\n    331004: '路桥区',\n    331021: '玉环县',\n    331022: '三门县',\n    331023: '天台县',\n    331024: '仙居县',\n    331081: '温岭市',\n    331082: '临海市'\n  },\n  331100: {\n    331102: '莲都区',\n    331121: '青田县',\n    331122: '缙云县',\n    331123: '遂昌县',\n    331124: '松阳县',\n    331125: '云和县',\n    331126: '庆元县',\n    331127: '景宁畲族自治县',\n    331181: '龙泉市'\n  },\n  340000: {\n    340100: '合肥市',\n    340200: '芜湖市',\n    340300: '蚌埠市',\n    340400: '淮南市',\n    340500: '马鞍山市',\n    340600: '淮北市',\n    340700: '铜陵市',\n    340800: '安庆市',\n    341000: '黄山市',\n    341100: '滁州市',\n    341200: '阜阳市',\n    341300: '宿州市',\n    341500: '六安市',\n    341600: '亳州市',\n    341700: '池州市',\n    341800: '宣城市'\n  },\n  340100: {\n    340102: '瑶海区',\n    340103: '庐阳区',\n    340104: '蜀山区',\n    340111: '包河区',\n    340121: '长丰县',\n    340122: '肥东县',\n    340123: '肥西县',\n    340124: '庐江县',\n    340181: '巢湖市'\n  },\n  340200: {\n    340202: '镜湖区',\n    340203: '弋江区',\n    340207: '鸠江区',\n    340208: '三山区',\n    340221: '芜湖县',\n    340222: '繁昌县',\n    340223: '南陵县',\n    340225: '无为县'\n  },\n  340300: {\n    340302: '龙子湖区',\n    340303: '蚌山区',\n    340304: '禹会区',\n    340311: '淮上区',\n    340321: '怀远县',\n    340322: '五河县',\n    340323: '固镇县'\n  },\n  340400: {\n    340402: '大通区',\n    340403: '田家庵区',\n    340404: '谢家集区',\n    340405: '八公山区',\n    340406: '潘集区',\n    340421: '凤台县',\n    340422: '寿县'\n  },\n  340500: {\n    340503: '花山区',\n    340504: '雨山区',\n    340506: '博望区',\n    340521: '当涂县',\n    340522: '含山县',\n    340523: '和县'\n  },\n  340600: {\n    340602: '杜集区',\n    340603: '相山区',\n    340604: '烈山区',\n    340621: '濉溪县'\n  },\n  340700: {\n    340705: '铜官区',\n    340706: '义安区',\n    340711: '郊区',\n    340722: '枞阳县'\n  },\n  340800: {\n    340802: '迎江区',\n    340803: '大观区',\n    340811: '宜秀区',\n    340822: '怀宁县',\n    340824: '潜山县',\n    340825: '太湖县',\n    340826: '宿松县',\n    340827: '望江县',\n    340828: '岳西县',\n    340881: '桐城市'\n  },\n  341000: {\n    341002: '屯溪区',\n    341003: '黄山区',\n    341004: '徽州区',\n    341021: '歙县',\n    341022: '休宁县',\n    341023: '黟县',\n    341024: '祁门县'\n  },\n  341100: {\n    341102: '琅琊区',\n    341103: '南谯区',\n    341122: '来安县',\n    341124: '全椒县',\n    341125: '定远县',\n    341126: '凤阳县',\n    341181: '天长市',\n    341182: '明光市'\n  },\n  341200: {\n    341202: '颍州区',\n    341203: '颍东区',\n    341204: '颍泉区',\n    341221: '临泉县',\n    341222: '太和县',\n    341225: '阜南县',\n    341226: '颍上县',\n    341282: '界首市'\n  },\n  341300: {\n    341302: '埇桥区',\n    341321: '砀山县',\n    341322: '萧县',\n    341323: '灵璧县',\n    341324: '泗县'\n  },\n  341500: {\n    341502: '金安区',\n    341503: '裕安区',\n    341504: '叶集区',\n    341522: '霍邱县',\n    341523: '舒城县',\n    341524: '金寨县',\n    341525: '霍山县'\n  },\n  341600: {\n    341602: '谯城区',\n    341621: '涡阳县',\n    341622: '蒙城县',\n    341623: '利辛县'\n  },\n  341700: {\n    341702: '贵池区',\n    341721: '东至县',\n    341722: '石台县',\n    341723: '青阳县'\n  },\n  341800: {\n    341802: '宣州区',\n    341821: '郎溪县',\n    341822: '广德县',\n    341823: '泾县',\n    341824: '绩溪县',\n    341825: '旌德县',\n    341881: '宁国市'\n  },\n  350000: {\n    350100: '福州市',\n    350200: '厦门市',\n    350300: '莆田市',\n    350400: '三明市',\n    350500: '泉州市',\n    350600: '漳州市',\n    350700: '南平市',\n    350800: '龙岩市',\n    350900: '宁德市'\n  },\n  350100: {\n    350102: '鼓楼区',\n    350103: '台江区',\n    350104: '仓山区',\n    350105: '马尾区',\n    350111: '晋安区',\n    350121: '闽侯县',\n    350122: '连江县',\n    350123: '罗源县',\n    350124: '闽清县',\n    350125: '永泰县',\n    350128: '平潭县',\n    350181: '福清市',\n    350182: '长乐市'\n  },\n  350200: {\n    350203: '思明区',\n    350205: '海沧区',\n    350206: '湖里区',\n    350211: '集美区',\n    350212: '同安区',\n    350213: '翔安区'\n  },\n  350300: {\n    350302: '城厢区',\n    350303: '涵江区',\n    350304: '荔城区',\n    350305: '秀屿区',\n    350322: '仙游县'\n  },\n  350400: {\n    350402: '梅列区',\n    350403: '三元区',\n    350421: '明溪县',\n    350423: '清流县',\n    350424: '宁化县',\n    350425: '大田县',\n    350426: '尤溪县',\n    350427: '沙县',\n    350428: '将乐县',\n    350429: '泰宁县',\n    350430: '建宁县',\n    350481: '永安市'\n  },\n  350500: {\n    350502: '鲤城区',\n    350503: '丰泽区',\n    350504: '洛江区',\n    350505: '泉港区',\n    350521: '惠安县',\n    350524: '安溪县',\n    350525: '永春县',\n    350526: '德化县',\n    350527: '金门县',\n    350581: '石狮市',\n    350582: '晋江市',\n    350583: '南安市'\n  },\n  350600: {\n    350602: '芗城区',\n    350603: '龙文区',\n    350622: '云霄县',\n    350623: '漳浦县',\n    350624: '诏安县',\n    350625: '长泰县',\n    350626: '东山县',\n    350627: '南靖县',\n    350628: '平和县',\n    350629: '华安县',\n    350681: '龙海市'\n  },\n  350700: {\n    350702: '延平区',\n    350703: '建阳区',\n    350721: '顺昌县',\n    350722: '浦城县',\n    350723: '光泽县',\n    350724: '松溪县',\n    350725: '政和县',\n    350781: '邵武市',\n    350782: '武夷山市',\n    350783: '建瓯市'\n  },\n  350800: {\n    350802: '新罗区',\n    350803: '永定区',\n    350821: '长汀县',\n    350823: '上杭县',\n    350824: '武平县',\n    350825: '连城县',\n    350881: '漳平市'\n  },\n  350900: {\n    350902: '蕉城区',\n    350921: '霞浦县',\n    350922: '古田县',\n    350923: '屏南县',\n    350924: '寿宁县',\n    350925: '周宁县',\n    350926: '柘荣县',\n    350981: '福安市',\n    350982: '福鼎市'\n  },\n  360000: {\n    360100: '南昌市',\n    360200: '景德镇市',\n    360300: '萍乡市',\n    360400: '九江市',\n    360500: '新余市',\n    360600: '鹰潭市',\n    360700: '赣州市',\n    360800: '吉安市',\n    360900: '宜春市',\n    361000: '抚州市',\n    361100: '上饶市'\n  },\n  360100: {\n    360102: '东湖区',\n    360103: '西湖区',\n    360104: '青云谱区',\n    360105: '湾里区',\n    360111: '青山湖区',\n    360112: '新建区',\n    360121: '南昌县',\n    360123: '安义县',\n    360124: '进贤县'\n  },\n  360200: {\n    360202: '昌江区',\n    360203: '珠山区',\n    360222: '浮梁县',\n    360281: '乐平市'\n  },\n  360300: {\n    360302: '安源区',\n    360313: '湘东区',\n    360321: '莲花县',\n    360322: '上栗县',\n    360323: '芦溪县'\n  },\n  360400: {\n    360402: '濂溪区',\n    360403: '浔阳区',\n    360421: '九江县',\n    360423: '武宁县',\n    360424: '修水县',\n    360425: '永修县',\n    360426: '德安县',\n    360427: '庐山市',\n    360428: '都昌县',\n    360429: '湖口县',\n    360430: '彭泽县',\n    360481: '瑞昌市',\n    360482: '共青城市'\n  },\n  360500: {\n    360502: '渝水区',\n    360521: '分宜县'\n  },\n  360600: {\n    360602: '月湖区',\n    360622: '余江县',\n    360681: '贵溪市'\n  },\n  360700: {\n    360702: '章贡区',\n    360703: '南康区',\n    360721: '赣县区',\n    360722: '信丰县',\n    360723: '大余县',\n    360724: '上犹县',\n    360725: '崇义县',\n    360726: '安远县',\n    360727: '龙南县',\n    360728: '定南县',\n    360729: '全南县',\n    360730: '宁都县',\n    360731: '于都县',\n    360732: '兴国县',\n    360733: '会昌县',\n    360734: '寻乌县',\n    360735: '石城县',\n    360781: '瑞金市'\n  },\n  360800: {\n    360802: '吉州区',\n    360803: '青原区',\n    360821: '吉安县',\n    360822: '吉水县',\n    360823: '峡江县',\n    360824: '新干县',\n    360825: '永丰县',\n    360826: '泰和县',\n    360827: '遂川县',\n    360828: '万安县',\n    360829: '安福县',\n    360830: '永新县',\n    360881: '井冈山市'\n  },\n  360900: {\n    360902: '袁州区',\n    360921: '奉新县',\n    360922: '万载县',\n    360923: '上高县',\n    360924: '宜丰县',\n    360925: '靖安县',\n    360926: '铜鼓县',\n    360981: '丰城市',\n    360982: '樟树市',\n    360983: '高安市'\n  },\n  361000: {\n    361002: '临川区',\n    361021: '南城县',\n    361022: '黎川县',\n    361023: '南丰县',\n    361024: '崇仁县',\n    361025: '乐安县',\n    361026: '宜黄县',\n    361027: '金溪县',\n    361028: '资溪县',\n    361029: '东乡县',\n    361030: '广昌县'\n  },\n  361100: {\n    361102: '信州区',\n    361103: '广丰区',\n    361121: '上饶县',\n    361123: '玉山县',\n    361124: '铅山县',\n    361125: '横峰县',\n    361126: '弋阳县',\n    361127: '余干县',\n    361128: '鄱阳县',\n    361129: '万年县',\n    361130: '婺源县',\n    361181: '德兴市'\n  },\n  370000: {\n    370100: '济南市',\n    370200: '青岛市',\n    370300: '淄博市',\n    370400: '枣庄市',\n    370500: '东营市',\n    370600: '烟台市',\n    370700: '潍坊市',\n    370800: '济宁市',\n    370900: '泰安市',\n    371000: '威海市',\n    371100: '日照市',\n    371200: '莱芜市',\n    371300: '临沂市',\n    371400: '德州市',\n    371500: '聊城市',\n    371600: '滨州市',\n    371700: '菏泽市'\n  },\n  370100: {\n    370102: '历下区',\n    370103: '市中区',\n    370104: '槐荫区',\n    370105: '天桥区',\n    370112: '历城区',\n    370113: '长清区',\n    370124: '平阴县',\n    370125: '济阳县',\n    370126: '商河县',\n    370181: '章丘区'\n  },\n  370200: {\n    370202: '市南区',\n    370203: '市北区',\n    370211: '黄岛区',\n    370212: '崂山区',\n    370213: '李沧区',\n    370214: '城阳区',\n    370281: '胶州市',\n    370282: '即墨市',\n    370283: '平度市',\n    370285: '莱西市'\n  },\n  370300: {\n    370302: '淄川区',\n    370303: '张店区',\n    370304: '博山区',\n    370305: '临淄区',\n    370306: '周村区',\n    370321: '桓台县',\n    370322: '高青县',\n    370323: '沂源县'\n  },\n  370400: {\n    370402: '市中区',\n    370403: '薛城区',\n    370404: '峄城区',\n    370405: '台儿庄区',\n    370406: '山亭区',\n    370481: '滕州市'\n  },\n  370500: {\n    370502: '东营区',\n    370503: '河口区',\n    370505: '垦利区',\n    370522: '利津县',\n    370523: '广饶县'\n  },\n  370600: {\n    370602: '芝罘区',\n    370611: '福山区',\n    370612: '牟平区',\n    370613: '莱山区',\n    370634: '长岛县',\n    370681: '龙口市',\n    370682: '莱阳市',\n    370683: '莱州市',\n    370684: '蓬莱市',\n    370685: '招远市',\n    370686: '栖霞市',\n    370687: '海阳市'\n  },\n  370700: {\n    370702: '潍城区',\n    370703: '寒亭区',\n    370704: '坊子区',\n    370705: '奎文区',\n    370724: '临朐县',\n    370725: '昌乐县',\n    370781: '青州市',\n    370782: '诸城市',\n    370783: '寿光市',\n    370784: '安丘市',\n    370785: '高密市',\n    370786: '昌邑市'\n  },\n  370800: {\n    370811: '任城区',\n    370812: '兖州区',\n    370826: '微山县',\n    370827: '鱼台县',\n    370828: '金乡县',\n    370829: '嘉祥县',\n    370830: '汶上县',\n    370831: '泗水县',\n    370832: '梁山县',\n    370881: '曲阜市',\n    370883: '邹城市'\n  },\n  370900: {\n    370902: '泰山区',\n    370911: '岱岳区',\n    370921: '宁阳县',\n    370923: '东平县',\n    370982: '新泰市',\n    370983: '肥城市'\n  },\n  371000: {\n    371002: '环翠区',\n    371003: '文登区',\n    371082: '荣成市',\n    371083: '乳山市'\n  },\n  371100: {\n    371102: '东港区',\n    371103: '岚山区',\n    371121: '五莲县',\n    371122: '莒县'\n  },\n  371200: {\n    371202: '莱城区',\n    371203: '钢城区'\n  },\n  371300: {\n    371302: '兰山区',\n    371311: '罗庄区',\n    371312: '河东区',\n    371321: '沂南县',\n    371322: '郯城县',\n    371323: '沂水县',\n    371324: '兰陵县',\n    371325: '费县',\n    371326: '平邑县',\n    371327: '莒南县',\n    371328: '蒙阴县',\n    371329: '临沭县'\n  },\n  371400: {\n    371402: '德城区',\n    371403: '陵城区',\n    371422: '宁津县',\n    371423: '庆云县',\n    371424: '临邑县',\n    371425: '齐河县',\n    371426: '平原县',\n    371427: '夏津县',\n    371428: '武城县',\n    371481: '乐陵市',\n    371482: '禹城市'\n  },\n  371500: {\n    371502: '东昌府区',\n    371521: '阳谷县',\n    371522: '莘县',\n    371523: '茌平县',\n    371524: '东阿县',\n    371525: '冠县',\n    371526: '高唐县',\n    371581: '临清市'\n  },\n  371600: {\n    371602: '滨城区',\n    371603: '沾化区',\n    371621: '惠民县',\n    371622: '阳信县',\n    371623: '无棣县',\n    371625: '博兴县',\n    371626: '邹平县'\n  },\n  371700: {\n    371702: '牡丹区',\n    371703: '定陶区',\n    371721: '曹县',\n    371722: '单县',\n    371723: '成武县',\n    371724: '巨野县',\n    371725: '郓城县',\n    371726: '鄄城县',\n    371728: '东明县'\n  },\n  410000: {\n    410100: '郑州市',\n    410200: '开封市',\n    410300: '洛阳市',\n    410400: '平顶山市',\n    410500: '安阳市',\n    410600: '鹤壁市',\n    410700: '新乡市',\n    410800: '焦作市',\n    410900: '濮阳市',\n    411000: '许昌市',\n    411100: '漯河市',\n    411200: '三门峡市',\n    411300: '南阳市',\n    411400: '商丘市',\n    411500: '信阳市',\n    411600: '周口市',\n    411700: '驻马店市',\n    419001: '济源市'\n  },\n  410100: {\n    410102: '中原区',\n    410103: '二七区',\n    410104: '管城回族区',\n    410105: '金水区',\n    410106: '上街区',\n    410108: '惠济区',\n    410122: '中牟县',\n    410181: '巩义市',\n    410182: '荥阳市',\n    410183: '新密市',\n    410184: '新郑市',\n    410185: '登封市'\n  },\n  410200: {\n    410202: '龙亭区',\n    410203: '顺河回族区',\n    410204: '鼓楼区',\n    410205: '禹王台区',\n    410212: '祥符区',\n    410221: '杞县',\n    410222: '通许县',\n    410223: '尉氏县',\n    410225: '兰考县'\n  },\n  410300: {\n    410302: '老城区',\n    410303: '西工区',\n    410304: '瀍河回族区',\n    410305: '涧西区',\n    410306: '吉利区',\n    410311: '洛龙区',\n    410322: '孟津县',\n    410323: '新安县',\n    410324: '栾川县',\n    410325: '嵩县',\n    410326: '汝阳县',\n    410327: '宜阳县',\n    410328: '洛宁县',\n    410329: '伊川县',\n    410381: '偃师市'\n  },\n  410400: {\n    410402: '新华区',\n    410403: '卫东区',\n    410404: '石龙区',\n    410411: '湛河区',\n    410421: '宝丰县',\n    410422: '叶县',\n    410423: '鲁山县',\n    410425: '郏县',\n    410481: '舞钢市',\n    410482: '汝州市'\n  },\n  410500: {\n    410502: '文峰区',\n    410503: '北关区',\n    410505: '殷都区',\n    410506: '龙安区',\n    410522: '安阳县',\n    410523: '汤阴县',\n    410526: '滑县',\n    410527: '内黄县',\n    410581: '林州市'\n  },\n  410600: {\n    410602: '鹤山区',\n    410603: '山城区',\n    410611: '淇滨区',\n    410621: '浚县',\n    410622: '淇县'\n  },\n  410700: {\n    410702: '红旗区',\n    410703: '卫滨区',\n    410704: '凤泉区',\n    410711: '牧野区',\n    410721: '新乡县',\n    410724: '获嘉县',\n    410725: '原阳县',\n    410726: '延津县',\n    410727: '封丘县',\n    410728: '长垣县',\n    410781: '卫辉市',\n    410782: '辉县市'\n  },\n  410800: {\n    410802: '解放区',\n    410803: '中站区',\n    410804: '马村区',\n    410811: '山阳区',\n    410821: '修武县',\n    410822: '博爱县',\n    410823: '武陟县',\n    410825: '温县',\n    410882: '沁阳市',\n    410883: '孟州市'\n  },\n  410900: {\n    410902: '华龙区',\n    410922: '清丰县',\n    410923: '南乐县',\n    410926: '范县',\n    410927: '台前县',\n    410928: '濮阳县'\n  },\n  411000: {\n    411002: '魏都区',\n    411023: '建安区',\n    411024: '鄢陵县',\n    411025: '襄城县',\n    411081: '禹州市',\n    411082: '长葛市'\n  },\n  411100: {\n    411102: '源汇区',\n    411103: '郾城区',\n    411104: '召陵区',\n    411121: '舞阳县',\n    411122: '临颍县'\n  },\n  411200: {\n    411202: '湖滨区',\n    411203: '陕州区',\n    411221: '渑池县',\n    411224: '卢氏县',\n    411281: '义马市',\n    411282: '灵宝市'\n  },\n  411300: {\n    411302: '宛城区',\n    411303: '卧龙区',\n    411321: '南召县',\n    411322: '方城县',\n    411323: '西峡县',\n    411324: '镇平县',\n    411325: '内乡县',\n    411326: '淅川县',\n    411327: '社旗县',\n    411328: '唐河县',\n    411329: '新野县',\n    411330: '桐柏县',\n    411381: '邓州市'\n  },\n  411400: {\n    411402: '梁园区',\n    411403: '睢阳区',\n    411421: '民权县',\n    411422: '睢县',\n    411423: '宁陵县',\n    411424: '柘城县',\n    411425: '虞城县',\n    411426: '夏邑县',\n    411481: '永城市'\n  },\n  411500: {\n    411502: '浉河区',\n    411503: '平桥区',\n    411521: '罗山县',\n    411522: '光山县',\n    411523: '新县',\n    411524: '商城县',\n    411525: '固始县',\n    411526: '潢川县',\n    411527: '淮滨县',\n    411528: '息县'\n  },\n  411600: {\n    411602: '川汇区',\n    411621: '扶沟县',\n    411622: '西华县',\n    411623: '商水县',\n    411624: '沈丘县',\n    411625: '郸城县',\n    411626: '淮阳县',\n    411627: '太康县',\n    411628: '鹿邑县',\n    411681: '项城市'\n  },\n  411700: {\n    411702: '驿城区',\n    411721: '西平县',\n    411722: '上蔡县',\n    411723: '平舆县',\n    411724: '正阳县',\n    411725: '确山县',\n    411726: '泌阳县',\n    411727: '汝南县',\n    411728: '遂平县',\n    411729: '新蔡县'\n  },\n  420000: {\n    420100: '武汉市',\n    420200: '黄石市',\n    420300: '十堰市',\n    420500: '宜昌市',\n    420600: '襄阳市',\n    420700: '鄂州市',\n    420800: '荆门市',\n    420900: '孝感市',\n    421000: '荆州市',\n    421100: '黄冈市',\n    421200: '咸宁市',\n    421300: '随州市',\n    422800: '恩施土家族苗族自治州',\n    429004: '仙桃市',\n    429005: '潜江市',\n    429006: '天门市',\n    429021: '神农架林区'\n  },\n  420100: {\n    420102: '江岸区',\n    420103: '江汉区',\n    420104: '硚口区',\n    420105: '汉阳区',\n    420106: '武昌区',\n    420107: '青山区',\n    420111: '洪山区',\n    420112: '东西湖区',\n    420113: '汉南区',\n    420114: '蔡甸区',\n    420115: '江夏区',\n    420116: '黄陂区',\n    420117: '新洲区'\n  },\n  420200: {\n    420202: '黄石港区',\n    420203: '西塞山区',\n    420204: '下陆区',\n    420205: '铁山区',\n    420222: '阳新县',\n    420281: '大冶市'\n  },\n  420300: {\n    420302: '茅箭区',\n    420303: '张湾区',\n    420304: '郧阳区',\n    420322: '郧西县',\n    420323: '竹山县',\n    420324: '竹溪县',\n    420325: '房县',\n    420381: '丹江口市'\n  },\n  420500: {\n    420502: '西陵区',\n    420503: '伍家岗区',\n    420504: '点军区',\n    420505: '猇亭区',\n    420506: '夷陵区',\n    420525: '远安县',\n    420526: '兴山县',\n    420527: '秭归县',\n    420528: '长阳土家族自治县',\n    420529: '五峰土家族自治县',\n    420581: '宜都市',\n    420582: '当阳市',\n    420583: '枝江市'\n  },\n  420600: {\n    420602: '襄城区',\n    420606: '樊城区',\n    420607: '襄州区',\n    420624: '南漳县',\n    420625: '谷城县',\n    420626: '保康县',\n    420682: '老河口市',\n    420683: '枣阳市',\n    420684: '宜城市'\n  },\n  420700: {\n    420702: '梁子湖区',\n    420703: '华容区',\n    420704: '鄂城区'\n  },\n  420800: {\n    420802: '东宝区',\n    420804: '掇刀区',\n    420821: '京山县',\n    420822: '沙洋县',\n    420881: '钟祥市'\n  },\n  420900: {\n    420902: '孝南区',\n    420921: '孝昌县',\n    420922: '大悟县',\n    420923: '云梦县',\n    420981: '应城市',\n    420982: '安陆市',\n    420984: '汉川市'\n  },\n  421000: {\n    421002: '沙市区',\n    421003: '荆州区',\n    421022: '公安县',\n    421023: '监利县',\n    421024: '江陵县',\n    421081: '石首市',\n    421083: '洪湖市',\n    421087: '松滋市'\n  },\n  421100: {\n    421102: '黄州区',\n    421121: '团风县',\n    421122: '红安县',\n    421123: '罗田县',\n    421124: '英山县',\n    421125: '浠水县',\n    421126: '蕲春县',\n    421127: '黄梅县',\n    421181: '麻城市',\n    421182: '武穴市'\n  },\n  421200: {\n    421202: '咸安区',\n    421221: '嘉鱼县',\n    421222: '通城县',\n    421223: '崇阳县',\n    421224: '通山县',\n    421281: '赤壁市'\n  },\n  421300: {\n    421303: '曾都区',\n    421321: '随县',\n    421381: '广水市'\n  },\n  422800: {\n    422801: '恩施市',\n    422802: '利川市',\n    422822: '建始县',\n    422823: '巴东县',\n    422825: '宣恩县',\n    422826: '咸丰县',\n    422827: '来凤县',\n    422828: '鹤峰县'\n  },\n  430000: {\n    430100: '长沙市',\n    430200: '株洲市',\n    430300: '湘潭市',\n    430400: '衡阳市',\n    430500: '邵阳市',\n    430600: '岳阳市',\n    430700: '常德市',\n    430800: '张家界市',\n    430900: '益阳市',\n    431000: '郴州市',\n    431100: '永州市',\n    431200: '怀化市',\n    431300: '娄底市',\n    433100: '湘西土家族苗族自治州'\n  },\n  430100: {\n    430102: '芙蓉区',\n    430103: '天心区',\n    430104: '岳麓区',\n    430105: '开福区',\n    430111: '雨花区',\n    430112: '望城区',\n    430121: '长沙县',\n    430124: '宁乡县',\n    430181: '浏阳市'\n  },\n  430200: {\n    430202: '荷塘区',\n    430203: '芦淞区',\n    430204: '石峰区',\n    430211: '天元区',\n    430221: '株洲县',\n    430223: '攸县',\n    430224: '茶陵县',\n    430225: '炎陵县',\n    430281: '醴陵市'\n  },\n  430300: {\n    430302: '雨湖区',\n    430304: '岳塘区',\n    430321: '湘潭县',\n    430381: '湘乡市',\n    430382: '韶山市'\n  },\n  430400: {\n    430405: '珠晖区',\n    430406: '雁峰区',\n    430407: '石鼓区',\n    430408: '蒸湘区',\n    430412: '南岳区',\n    430421: '衡阳县',\n    430422: '衡南县',\n    430423: '衡山县',\n    430424: '衡东县',\n    430426: '祁东县',\n    430481: '耒阳市',\n    430482: '常宁市'\n  },\n  430500: {\n    430502: '双清区',\n    430503: '大祥区',\n    430511: '北塔区',\n    430521: '邵东县',\n    430522: '新邵县',\n    430523: '邵阳县',\n    430524: '隆回县',\n    430525: '洞口县',\n    430527: '绥宁县',\n    430528: '新宁县',\n    430529: '城步苗族自治县',\n    430581: '武冈市'\n  },\n  430600: {\n    430602: '岳阳楼区',\n    430603: '云溪区',\n    430611: '君山区',\n    430621: '岳阳县',\n    430623: '华容县',\n    430624: '湘阴县',\n    430626: '平江县',\n    430681: '汨罗市',\n    430682: '临湘市'\n  },\n  430700: {\n    430702: '武陵区',\n    430703: '鼎城区',\n    430721: '安乡县',\n    430722: '汉寿县',\n    430723: '澧县',\n    430724: '临澧县',\n    430725: '桃源县',\n    430726: '石门县',\n    430781: '津市市'\n  },\n  430800: {\n    430802: '永定区',\n    430811: '武陵源区',\n    430821: '慈利县',\n    430822: '桑植县'\n  },\n  430900: {\n    430902: '资阳区',\n    430903: '赫山区',\n    430921: '南县',\n    430922: '桃江县',\n    430923: '安化县',\n    430981: '沅江市'\n  },\n  431000: {\n    431002: '北湖区',\n    431003: '苏仙区',\n    431021: '桂阳县',\n    431022: '宜章县',\n    431023: '永兴县',\n    431024: '嘉禾县',\n    431025: '临武县',\n    431026: '汝城县',\n    431027: '桂东县',\n    431028: '安仁县',\n    431081: '资兴市'\n  },\n  431100: {\n    431102: '零陵区',\n    431103: '冷水滩区',\n    431121: '祁阳县',\n    431122: '东安县',\n    431123: '双牌县',\n    431124: '道县',\n    431125: '江永县',\n    431126: '宁远县',\n    431127: '蓝山县',\n    431128: '新田县',\n    431129: '江华瑶族自治县'\n  },\n  431200: {\n    431202: '鹤城区',\n    431221: '中方县',\n    431222: '沅陵县',\n    431223: '辰溪县',\n    431224: '溆浦县',\n    431225: '会同县',\n    431226: '麻阳苗族自治县',\n    431227: '新晃侗族自治县',\n    431228: '芷江侗族自治县',\n    431229: '靖州苗族侗族自治县',\n    431230: '通道侗族自治县',\n    431281: '洪江市'\n  },\n  431300: {\n    431302: '娄星区',\n    431321: '双峰县',\n    431322: '新化县',\n    431381: '冷水江市',\n    431382: '涟源市'\n  },\n  433100: {\n    433101: '吉首市',\n    433122: '泸溪县',\n    433123: '凤凰县',\n    433124: '花垣县',\n    433125: '保靖县',\n    433126: '古丈县',\n    433127: '永顺县',\n    433130: '龙山县'\n  },\n  440000: {\n    440100: '广州市',\n    440200: '韶关市',\n    440300: '深圳市',\n    440400: '珠海市',\n    440500: '汕头市',\n    440600: '佛山市',\n    440700: '江门市',\n    440800: '湛江市',\n    440900: '茂名市',\n    441200: '肇庆市',\n    441300: '惠州市',\n    441400: '梅州市',\n    441500: '汕尾市',\n    441600: '河源市',\n    441700: '阳江市',\n    441800: '清远市',\n    441900: '东莞市',\n    442000: '中山市',\n    445100: '潮州市',\n    445200: '揭阳市',\n    445300: '云浮市'\n  },\n  440100: {\n    440103: '荔湾区',\n    440104: '越秀区',\n    440105: '海珠区',\n    440106: '天河区',\n    440111: '白云区',\n    440112: '黄埔区',\n    440113: '番禺区',\n    440114: '花都区',\n    440115: '南沙区',\n    440117: '从化区',\n    440118: '增城区'\n  },\n  440200: {\n    440203: '武江区',\n    440204: '浈江区',\n    440205: '曲江区',\n    440222: '始兴县',\n    440224: '仁化县',\n    440229: '翁源县',\n    440232: '乳源瑶族自治县',\n    440233: '新丰县',\n    440281: '乐昌市',\n    440282: '南雄市'\n  },\n  440300: {\n    440303: '罗湖区',\n    440304: '福田区',\n    440305: '南山区',\n    440306: '宝安区',\n    440307: '龙岗区',\n    440308: '盐田区',\n    440309: '龙华区',\n    440310: '坪山区'\n  },\n  440400: {\n    440402: '香洲区',\n    440403: '斗门区',\n    440404: '金湾区'\n  },\n  440500: {\n    440507: '龙湖区',\n    440511: '金平区',\n    440512: '濠江区',\n    440513: '潮阳区',\n    440514: '潮南区',\n    440515: '澄海区',\n    440523: '南澳县'\n  },\n  440600: {\n    440604: '禅城区',\n    440605: '南海区',\n    440606: '顺德区',\n    440607: '三水区',\n    440608: '高明区'\n  },\n  440700: {\n    440703: '蓬江区',\n    440704: '江海区',\n    440705: '新会区',\n    440781: '台山市',\n    440783: '开平市',\n    440784: '鹤山市',\n    440785: '恩平市'\n  },\n  440800: {\n    440802: '赤坎区',\n    440803: '霞山区',\n    440804: '坡头区',\n    440811: '麻章区',\n    440823: '遂溪县',\n    440825: '徐闻县',\n    440881: '廉江市',\n    440882: '雷州市',\n    440883: '吴川市'\n  },\n  440900: {\n    440902: '茂南区',\n    440904: '电白区',\n    440981: '高州市',\n    440982: '化州市',\n    440983: '信宜市'\n  },\n  441200: {\n    441202: '端州区',\n    441203: '鼎湖区',\n    441204: '高要区',\n    441223: '广宁县',\n    441224: '怀集县',\n    441225: '封开县',\n    441226: '德庆县',\n    441284: '四会市'\n  },\n  441300: {\n    441302: '惠城区',\n    441303: '惠阳区',\n    441322: '博罗县',\n    441323: '惠东县',\n    441324: '龙门县'\n  },\n  441400: {\n    441402: '梅江区',\n    441403: '梅县区',\n    441422: '大埔县',\n    441423: '丰顺县',\n    441424: '五华县',\n    441426: '平远县',\n    441427: '蕉岭县',\n    441481: '兴宁市'\n  },\n  441500: {\n    441502: '城区',\n    441521: '海丰县',\n    441523: '陆河县',\n    441581: '陆丰市'\n  },\n  441600: {\n    441602: '源城区',\n    441621: '紫金县',\n    441622: '龙川县',\n    441623: '连平县',\n    441624: '和平县',\n    441625: '东源县'\n  },\n  441700: {\n    441702: '江城区',\n    441704: '阳东区',\n    441721: '阳西县',\n    441781: '阳春市'\n  },\n  441800: {\n    441802: '清城区',\n    441803: '清新区',\n    441821: '佛冈县',\n    441823: '阳山县',\n    441825: '连山壮族瑶族自治县',\n    441826: '连南瑶族自治县',\n    441881: '英德市',\n    441882: '连州市'\n  },\n  445100: {\n    445102: '湘桥区',\n    445103: '潮安区',\n    445122: '饶平县'\n  },\n  445200: {\n    445202: '榕城区',\n    445203: '揭东区',\n    445222: '揭西县',\n    445224: '惠来县',\n    445281: '普宁市'\n  },\n  445300: {\n    445302: '云城区',\n    445303: '云安区',\n    445321: '新兴县',\n    445322: '郁南县',\n    445381: '罗定市'\n  },\n  450000: {\n    450100: '南宁市',\n    450200: '柳州市',\n    450300: '桂林市',\n    450400: '梧州市',\n    450500: '北海市',\n    450600: '防城港市',\n    450700: '钦州市',\n    450800: '贵港市',\n    450900: '玉林市',\n    451000: '百色市',\n    451100: '贺州市',\n    451200: '河池市',\n    451300: '来宾市',\n    451400: '崇左市'\n  },\n  450100: {\n    450102: '兴宁区',\n    450103: '青秀区',\n    450105: '江南区',\n    450107: '西乡塘区',\n    450108: '良庆区',\n    450109: '邕宁区',\n    450110: '武鸣区',\n    450123: '隆安县',\n    450124: '马山县',\n    450125: '上林县',\n    450126: '宾阳县',\n    450127: '横县'\n  },\n  450200: {\n    450202: '城中区',\n    450203: '鱼峰区',\n    450204: '柳南区',\n    450205: '柳北区',\n    450221: '柳江区',\n    450222: '柳城县',\n    450223: '鹿寨县',\n    450224: '融安县',\n    450225: '融水苗族自治县',\n    450226: '三江侗族自治县'\n  },\n  450300: {\n    450302: '秀峰区',\n    450303: '叠彩区',\n    450304: '象山区',\n    450305: '七星区',\n    450311: '雁山区',\n    450312: '临桂区',\n    450321: '阳朔县',\n    450323: '灵川县',\n    450324: '全州县',\n    450325: '兴安县',\n    450326: '永福县',\n    450327: '灌阳县',\n    450328: '龙胜各族自治县',\n    450329: '资源县',\n    450330: '平乐县',\n    450331: '荔浦县',\n    450332: '恭城瑶族自治县'\n  },\n  450400: {\n    450403: '万秀区',\n    450405: '长洲区',\n    450406: '龙圩区',\n    450421: '苍梧县',\n    450422: '藤县',\n    450423: '蒙山县',\n    450481: '岑溪市'\n  },\n  450500: {\n    450502: '海城区',\n    450503: '银海区',\n    450512: '铁山港区',\n    450521: '合浦县'\n  },\n  450600: {\n    450602: '港口区',\n    450603: '防城区',\n    450621: '上思县',\n    450681: '东兴市'\n  },\n  450700: {\n    450702: '钦南区',\n    450703: '钦北区',\n    450721: '灵山县',\n    450722: '浦北县'\n  },\n  450800: {\n    450802: '港北区',\n    450803: '港南区',\n    450804: '覃塘区',\n    450821: '平南县',\n    450881: '桂平市'\n  },\n  450900: {\n    450902: '玉州区',\n    450903: '福绵区',\n    450921: '容县',\n    450922: '陆川县',\n    450923: '博白县',\n    450924: '兴业县',\n    450981: '北流市'\n  },\n  451000: {\n    451002: '右江区',\n    451021: '田阳县',\n    451022: '田东县',\n    451023: '平果县',\n    451024: '德保县',\n    451026: '那坡县',\n    451027: '凌云县',\n    451028: '乐业县',\n    451029: '田林县',\n    451030: '西林县',\n    451031: '隆林各族自治县',\n    451081: '靖西市'\n  },\n  451100: {\n    451102: '八步区',\n    451103: '平桂区',\n    451121: '昭平县',\n    451122: '钟山县',\n    451123: '富川瑶族自治县'\n  },\n  451200: {\n    451202: '金城江区',\n    451221: '南丹县',\n    451222: '天峨县',\n    451223: '凤山县',\n    451224: '东兰县',\n    451225: '罗城仫佬族自治县',\n    451226: '环江毛南族自治县',\n    451227: '巴马瑶族自治县',\n    451228: '都安瑶族自治县',\n    451229: '大化瑶族自治县',\n    451281: '宜州市'\n  },\n  451300: {\n    451302: '兴宾区',\n    451321: '忻城县',\n    451322: '象州县',\n    451323: '武宣县',\n    451324: '金秀瑶族自治县',\n    451381: '合山市'\n  },\n  451400: {\n    451402: '江州区',\n    451421: '扶绥县',\n    451422: '宁明县',\n    451423: '龙州县',\n    451424: '大新县',\n    451425: '天等县',\n    451481: '凭祥市'\n  },\n  460000: {\n    460100: '海口市',\n    460200: '三亚市',\n    460300: '三沙市',\n    460400: '儋州市',\n    469001: '五指山市',\n    469002: '琼海市',\n    469005: '文昌市',\n    469006: '万宁市',\n    469007: '东方市',\n    469021: '定安县',\n    469022: '屯昌县',\n    469023: '澄迈县',\n    469024: '临高县',\n    469025: '白沙黎族自治县',\n    469026: '昌江黎族自治县',\n    469027: '乐东黎族自治县',\n    469028: '陵水黎族自治县',\n    469029: '保亭黎族苗族自治县',\n    469030: '琼中黎族苗族自治县'\n  },\n  460100: {\n    460105: '秀英区',\n    460106: '龙华区',\n    460107: '琼山区',\n    460108: '美兰区'\n  },\n  460200: {\n    460202: '海棠区',\n    460203: '吉阳区',\n    460204: '天涯区',\n    460205: '崖州区'\n  },\n  460300: {\n    460321: '西沙群岛',\n    460322: '南沙群岛',\n    460323: '中沙群岛的岛礁及其海域'\n  },\n  500000: {\n    500100: '重庆市市辖区',\n    500200: '重庆市郊县'\n  },\n  500100: {\n    500101: '万州区',\n    500102: '涪陵区',\n    500103: '渝中区',\n    500104: '大渡口区',\n    500105: '江北区',\n    500106: '沙坪坝区',\n    500107: '九龙坡区',\n    500108: '南岸区',\n    500109: '北碚区',\n    500110: '綦江区',\n    500111: '大足区',\n    500112: '渝北区',\n    500113: '巴南区',\n    500114: '黔江区',\n    500115: '长寿区',\n    500116: '江津区',\n    500117: '合川区',\n    500118: '永川区',\n    500119: '南川区',\n    500120: '璧山区',\n    500151: '铜梁区',\n    500152: '潼南区',\n    500153: '荣昌区',\n    500154: '开州区',\n    500228: '梁平区',\n    500229: '城口县',\n    500230: '丰都县',\n    500231: '垫江县',\n    500232: '武隆区',\n    500233: '忠县',\n    500235: '云阳县',\n    500236: '奉节县',\n    500237: '巫山县',\n    500238: '巫溪县',\n    500240: '石柱土家族自治县',\n    500241: '秀山土家族苗族自治县',\n    500242: '酉阳土家族苗族自治县',\n    500243: '彭水苗族土家族自治县'\n  },\n  510000: {\n    510100: '成都市',\n    510300: '自贡市',\n    510400: '攀枝花市',\n    510500: '泸州市',\n    510600: '德阳市',\n    510700: '绵阳市',\n    510800: '广元市',\n    510900: '遂宁市',\n    511000: '内江市',\n    511100: '乐山市',\n    511300: '南充市',\n    511400: '眉山市',\n    511500: '宜宾市',\n    511600: '广安市',\n    511700: '达州市',\n    511800: '雅安市',\n    511900: '巴中市',\n    512000: '资阳市',\n    513200: '阿坝藏族羌族自治州',\n    513300: '甘孜藏族自治州',\n    513400: '凉山彝族自治州'\n  },\n  510100: {\n    510104: '锦江区',\n    510105: '青羊区',\n    510106: '金牛区',\n    510107: '武侯区',\n    510108: '成华区',\n    510112: '龙泉驿区',\n    510113: '青白江区',\n    510114: '新都区',\n    510115: '温江区',\n    510116: '双流区',\n    510121: '金堂县',\n    510124: '郫都区',\n    510129: '大邑县',\n    510131: '蒲江县',\n    510132: '新津县',\n    510180: '简阳市',\n    510181: '都江堰市',\n    510182: '彭州市',\n    510183: '邛崃市',\n    510184: '崇州市'\n  },\n  510300: {\n    510302: '自流井区',\n    510303: '贡井区',\n    510304: '大安区',\n    510311: '沿滩区',\n    510321: '荣县',\n    510322: '富顺县'\n  },\n  510400: {\n    510402: '东区',\n    510403: '西区',\n    510411: '仁和区',\n    510421: '米易县',\n    510422: '盐边县'\n  },\n  510500: {\n    510502: '江阳区',\n    510503: '纳溪区',\n    510504: '龙马潭区',\n    510521: '泸县',\n    510522: '合江县',\n    510524: '叙永县',\n    510525: '古蔺县'\n  },\n  510600: {\n    510603: '旌阳区',\n    510623: '中江县',\n    510626: '罗江县',\n    510681: '广汉市',\n    510682: '什邡市',\n    510683: '绵竹市'\n  },\n  510700: {\n    510703: '涪城区',\n    510704: '游仙区',\n    510705: '安州区',\n    510722: '三台县',\n    510723: '盐亭县',\n    510725: '梓潼县',\n    510726: '北川羌族自治县',\n    510727: '平武县',\n    510781: '江油市'\n  },\n  510800: {\n    510802: '利州区',\n    510811: '昭化区',\n    510812: '朝天区',\n    510821: '旺苍县',\n    510822: '青川县',\n    510823: '剑阁县',\n    510824: '苍溪县'\n  },\n  510900: {\n    510903: '船山区',\n    510904: '安居区',\n    510921: '蓬溪县',\n    510922: '射洪县',\n    510923: '大英县'\n  },\n  511000: {\n    511002: '市中区',\n    511011: '东兴区',\n    511024: '威远县',\n    511025: '资中县',\n    511028: '隆昌县'\n  },\n  511100: {\n    511102: '市中区',\n    511111: '沙湾区',\n    511112: '五通桥区',\n    511113: '金口河区',\n    511123: '犍为县',\n    511124: '井研县',\n    511126: '夹江县',\n    511129: '沐川县',\n    511132: '峨边彝族自治县',\n    511133: '马边彝族自治县',\n    511181: '峨眉山市'\n  },\n  511300: {\n    511302: '顺庆区',\n    511303: '高坪区',\n    511304: '嘉陵区',\n    511321: '南部县',\n    511322: '营山县',\n    511323: '蓬安县',\n    511324: '仪陇县',\n    511325: '西充县',\n    511381: '阆中市'\n  },\n  511400: {\n    511402: '东坡区',\n    511403: '彭山区',\n    511421: '仁寿县',\n    511423: '洪雅县',\n    511424: '丹棱县',\n    511425: '青神县'\n  },\n  511500: {\n    511502: '翠屏区',\n    511503: '南溪区',\n    511521: '宜宾县',\n    511523: '江安县',\n    511524: '长宁县',\n    511525: '高县',\n    511526: '珙县',\n    511527: '筠连县',\n    511528: '兴文县',\n    511529: '屏山县'\n  },\n  511600: {\n    511602: '广安区',\n    511603: '前锋区',\n    511621: '岳池县',\n    511622: '武胜县',\n    511623: '邻水县',\n    511681: '华蓥市'\n  },\n  511700: {\n    511702: '通川区',\n    511703: '达川区',\n    511722: '宣汉县',\n    511723: '开江县',\n    511724: '大竹县',\n    511725: '渠县',\n    511781: '万源市'\n  },\n  511800: {\n    511802: '雨城区',\n    511803: '名山区',\n    511822: '荥经县',\n    511823: '汉源县',\n    511824: '石棉县',\n    511825: '天全县',\n    511826: '芦山县',\n    511827: '宝兴县'\n  },\n  511900: {\n    511902: '巴州区',\n    511903: '恩阳区',\n    511921: '通江县',\n    511922: '南江县',\n    511923: '平昌县'\n  },\n  512000: {\n    512002: '雁江区',\n    512021: '安岳县',\n    512022: '乐至县'\n  },\n  513200: {\n    513201: '马尔康市',\n    513221: '汶川县',\n    513222: '理县',\n    513223: '茂县',\n    513224: '松潘县',\n    513225: '九寨沟县',\n    513226: '金川县',\n    513227: '小金县',\n    513228: '黑水县',\n    513230: '壤塘县',\n    513231: '阿坝县',\n    513232: '若尔盖县',\n    513233: '红原县'\n  },\n  513300: {\n    513301: '康定市',\n    513322: '泸定县',\n    513323: '丹巴县',\n    513324: '九龙县',\n    513325: '雅江县',\n    513326: '道孚县',\n    513327: '炉霍县',\n    513328: '甘孜县',\n    513329: '新龙县',\n    513330: '德格县',\n    513331: '白玉县',\n    513332: '石渠县',\n    513333: '色达县',\n    513334: '理塘县',\n    513335: '巴塘县',\n    513336: '乡城县',\n    513337: '稻城县',\n    513338: '得荣县'\n  },\n  513400: {\n    513401: '西昌市',\n    513422: '木里藏族自治县',\n    513423: '盐源县',\n    513424: '德昌县',\n    513425: '会理县',\n    513426: '会东县',\n    513427: '宁南县',\n    513428: '普格县',\n    513429: '布拖县',\n    513430: '金阳县',\n    513431: '昭觉县',\n    513432: '喜德县',\n    513433: '冕宁县',\n    513434: '越西县',\n    513435: '甘洛县',\n    513436: '美姑县',\n    513437: '雷波县'\n  },\n  520000: {\n    520100: '贵阳市',\n    520200: '六盘水市',\n    520300: '遵义市',\n    520400: '安顺市',\n    520500: '毕节市',\n    520600: '铜仁市',\n    522300: '黔西南布依族苗族自治州',\n    522600: '黔东南苗族侗族自治州',\n    522700: '黔南布依族苗族自治州'\n  },\n  520100: {\n    520102: '南明区',\n    520103: '云岩区',\n    520111: '花溪区',\n    520112: '乌当区',\n    520113: '白云区',\n    520115: '观山湖区',\n    520121: '开阳县',\n    520122: '息烽县',\n    520123: '修文县',\n    520181: '清镇市'\n  },\n  520200: {\n    520201: '钟山区',\n    520203: '六枝特区',\n    520221: '水城县',\n    520222: '盘县'\n  },\n  520300: {\n    520302: '红花岗区',\n    520303: '汇川区',\n    520304: '播州区',\n    520322: '桐梓县',\n    520323: '绥阳县',\n    520324: '正安县',\n    520325: '道真仡佬族苗族自治县',\n    520326: '务川仡佬族苗族自治县',\n    520327: '凤冈县',\n    520328: '湄潭县',\n    520329: '余庆县',\n    520330: '习水县',\n    520381: '赤水市',\n    520382: '仁怀市'\n  },\n  520400: {\n    520402: '西秀区',\n    520403: '平坝区',\n    520422: '普定县',\n    520423: '镇宁布依族苗族自治县',\n    520424: '关岭布依族苗族自治县',\n    520425: '紫云苗族布依族自治县'\n  },\n  520500: {\n    520502: '七星关区',\n    520521: '大方县',\n    520522: '黔西县',\n    520523: '金沙县',\n    520524: '织金县',\n    520525: '纳雍县',\n    520526: '威宁彝族回族苗族自治县',\n    520527: '赫章县'\n  },\n  520600: {\n    520602: '碧江区',\n    520603: '万山区',\n    520621: '江口县',\n    520622: '玉屏侗族自治县',\n    520623: '石阡县',\n    520624: '思南县',\n    520625: '印江土家族苗族自治县',\n    520626: '德江县',\n    520627: '沿河土家族自治县',\n    520628: '松桃苗族自治县'\n  },\n  522300: {\n    522301: '兴义市',\n    522322: '兴仁县',\n    522323: '普安县',\n    522324: '晴隆县',\n    522325: '贞丰县',\n    522326: '望谟县',\n    522327: '册亨县',\n    522328: '安龙县'\n  },\n  522600: {\n    522601: '凯里市',\n    522622: '黄平县',\n    522623: '施秉县',\n    522624: '三穗县',\n    522625: '镇远县',\n    522626: '岑巩县',\n    522627: '天柱县',\n    522628: '锦屏县',\n    522629: '剑河县',\n    522630: '台江县',\n    522631: '黎平县',\n    522632: '榕江县',\n    522633: '从江县',\n    522634: '雷山县',\n    522635: '麻江县',\n    522636: '丹寨县'\n  },\n  522700: {\n    522701: '都匀市',\n    522702: '福泉市',\n    522722: '荔波县',\n    522723: '贵定县',\n    522725: '瓮安县',\n    522726: '独山县',\n    522727: '平塘县',\n    522728: '罗甸县',\n    522729: '长顺县',\n    522730: '龙里县',\n    522731: '惠水县',\n    522732: '三都水族自治县'\n  },\n  530000: {\n    530100: '昆明市',\n    530300: '曲靖市',\n    530400: '玉溪市',\n    530500: '保山市',\n    530600: '昭通市',\n    530700: '丽江市',\n    530800: '普洱市',\n    530900: '临沧市',\n    532300: '楚雄彝族自治州',\n    532500: '红河哈尼族彝族自治州',\n    532600: '文山壮族苗族自治州',\n    532800: '西双版纳傣族自治州',\n    532900: '大理白族自治州',\n    533100: '德宏傣族景颇族自治州',\n    533300: '怒江傈僳族自治州',\n    533400: '迪庆藏族自治州'\n  },\n  530100: {\n    530102: '五华区',\n    530103: '盘龙区',\n    530111: '官渡区',\n    530112: '西山区',\n    530113: '东川区',\n    530114: '呈贡区',\n    530122: '晋宁区',\n    530124: '富民县',\n    530125: '宜良县',\n    530126: '石林彝族自治县',\n    530127: '嵩明县',\n    530128: '禄劝彝族苗族自治县',\n    530129: '寻甸回族彝族自治县',\n    530181: '安宁市'\n  },\n  530300: {\n    530302: '麒麟区',\n    530303: '沾益区',\n    530321: '马龙县',\n    530322: '陆良县',\n    530323: '师宗县',\n    530324: '罗平县',\n    530325: '富源县',\n    530326: '会泽县',\n    530381: '宣威市'\n  },\n  530400: {\n    530402: '红塔区',\n    530403: '江川区',\n    530422: '澄江县',\n    530423: '通海县',\n    530424: '华宁县',\n    530425: '易门县',\n    530426: '峨山彝族自治县',\n    530427: '新平彝族傣族自治县',\n    530428: '元江哈尼族彝族傣族自治县'\n  },\n  530500: {\n    530502: '隆阳区',\n    530521: '施甸县',\n    530523: '龙陵县',\n    530524: '昌宁县',\n    530581: '腾冲市'\n  },\n  530600: {\n    530602: '昭阳区',\n    530621: '鲁甸县',\n    530622: '巧家县',\n    530623: '盐津县',\n    530624: '大关县',\n    530625: '永善县',\n    530626: '绥江县',\n    530627: '镇雄县',\n    530628: '彝良县',\n    530629: '威信县',\n    530630: '水富县'\n  },\n  530700: {\n    530702: '古城区',\n    530721: '玉龙纳西族自治县',\n    530722: '永胜县',\n    530723: '华坪县',\n    530724: '宁蒗彝族自治县'\n  },\n  530800: {\n    530802: '思茅区',\n    530821: '宁洱哈尼族彝族自治县',\n    530822: '墨江哈尼族自治县',\n    530823: '景东彝族自治县',\n    530824: '景谷傣族彝族自治县',\n    530825: '镇沅彝族哈尼族拉祜族自治县',\n    530826: '江城哈尼族彝族自治县',\n    530827: '孟连傣族拉祜族佤族自治县',\n    530828: '澜沧拉祜族自治县',\n    530829: '西盟佤族自治县'\n  },\n  530900: {\n    530902: '临翔区',\n    530921: '凤庆县',\n    530922: '云县',\n    530923: '永德县',\n    530924: '镇康县',\n    530925: '双江拉祜族佤族布朗族傣族自治县',\n    530926: '耿马傣族佤族自治县',\n    530927: '沧源佤族自治县'\n  },\n  532300: {\n    532301: '楚雄市',\n    532322: '双柏县',\n    532323: '牟定县',\n    532324: '南华县',\n    532325: '姚安县',\n    532326: '大姚县',\n    532327: '永仁县',\n    532328: '元谋县',\n    532329: '武定县',\n    532331: '禄丰县'\n  },\n  532500: {\n    532501: '个旧市',\n    532502: '开远市',\n    532503: '蒙自市',\n    532504: '弥勒市',\n    532523: '屏边苗族自治县',\n    532524: '建水县',\n    532525: '石屏县',\n    532527: '泸西县',\n    532528: '元阳县',\n    532529: '红河县',\n    532530: '金平苗族瑶族傣族自治县',\n    532531: '绿春县',\n    532532: '河口瑶族自治县'\n  },\n  532600: {\n    532601: '文山市',\n    532622: '砚山县',\n    532623: '西畴县',\n    532624: '麻栗坡县',\n    532625: '马关县',\n    532626: '丘北县',\n    532627: '广南县',\n    532628: '富宁县'\n  },\n  532800: {\n    532801: '景洪市',\n    532822: '勐海县',\n    532823: '勐腊县'\n  },\n  532900: {\n    532901: '大理市',\n    532922: '漾濞彝族自治县',\n    532923: '祥云县',\n    532924: '宾川县',\n    532925: '弥渡县',\n    532926: '南涧彝族自治县',\n    532927: '巍山彝族回族自治县',\n    532928: '永平县',\n    532929: '云龙县',\n    532930: '洱源县',\n    532931: '剑川县',\n    532932: '鹤庆县'\n  },\n  533100: {\n    533102: '瑞丽市',\n    533103: '芒市',\n    533122: '梁河县',\n    533123: '盈江县',\n    533124: '陇川县'\n  },\n  533300: {\n    533301: '泸水市',\n    533323: '福贡县',\n    533324: '贡山独龙族怒族自治县',\n    533325: '兰坪白族普米族自治县'\n  },\n  533400: {\n    533401: '香格里拉市',\n    533422: '德钦县',\n    533423: '维西傈僳族自治县'\n  },\n  540000: {\n    540100: '拉萨市',\n    540200: '日喀则市',\n    540300: '昌都市',\n    540400: '林芝市',\n    540500: '山南市',\n    542400: '那曲地区',\n    542500: '阿里地区'\n  },\n  540100: {\n    540102: '城关区',\n    540103: '堆龙德庆区',\n    540121: '林周县',\n    540122: '当雄县',\n    540123: '尼木县',\n    540124: '曲水县',\n    540126: '达孜县',\n    540127: '墨竹工卡县'\n  },\n  540200: {\n    540202: '桑珠孜区',\n    540221: '南木林县',\n    540222: '江孜县',\n    540223: '定日县',\n    540224: '萨迦县',\n    540225: '拉孜县',\n    540226: '昂仁县',\n    540227: '谢通门县',\n    540228: '白朗县',\n    540229: '仁布县',\n    540230: '康马县',\n    540231: '定结县',\n    540232: '仲巴县',\n    540233: '亚东县',\n    540234: '吉隆县',\n    540235: '聂拉木县',\n    540236: '萨嘎县',\n    540237: '岗巴县'\n  },\n  540300: {\n    540302: '卡若区',\n    540321: '江达县',\n    540322: '贡觉县',\n    540323: '类乌齐县',\n    540324: '丁青县',\n    540325: '察雅县',\n    540326: '八宿县',\n    540327: '左贡县',\n    540328: '芒康县',\n    540329: '洛隆县',\n    540330: '边坝县'\n  },\n  540400: {\n    540402: '巴宜区',\n    540421: '工布江达县',\n    540422: '米林县',\n    540423: '墨脱县',\n    540424: '波密县',\n    540425: '察隅县',\n    540426: '朗县'\n  },\n  540500: {\n    540502: '乃东区',\n    540521: '扎囊县',\n    540522: '贡嘎县',\n    540523: '桑日县',\n    540524: '琼结县',\n    540525: '曲松县',\n    540526: '措美县',\n    540527: '洛扎县',\n    540528: '加查县',\n    540529: '隆子县',\n    540530: '错那县',\n    540531: '浪卡子县'\n  },\n  542400: {\n    542421: '那曲县',\n    542422: '嘉黎县',\n    542423: '比如县',\n    542424: '聂荣县',\n    542425: '安多县',\n    542426: '申扎县',\n    542427: '索县',\n    542428: '班戈县',\n    542429: '巴青县',\n    542430: '尼玛县',\n    542431: '双湖县'\n  },\n  542500: {\n    542521: '普兰县',\n    542522: '札达县',\n    542523: '噶尔县',\n    542524: '日土县',\n    542525: '革吉县',\n    542526: '改则县',\n    542527: '措勤县'\n  },\n  610000: {\n    610100: '西安市',\n    610200: '铜川市',\n    610300: '宝鸡市',\n    610400: '咸阳市',\n    610500: '渭南市',\n    610600: '延安市',\n    610700: '汉中市',\n    610800: '榆林市',\n    610900: '安康市',\n    611000: '商洛市'\n  },\n  610100: {\n    610102: '新城区',\n    610103: '碑林区',\n    610104: '莲湖区',\n    610111: '灞桥区',\n    610112: '未央区',\n    610113: '雁塔区',\n    610114: '阎良区',\n    610115: '临潼区',\n    610116: '长安区',\n    610117: '高陵区',\n    610122: '蓝田县',\n    610124: '周至县',\n    610125: '鄠邑区'\n  },\n  610200: {\n    610202: '王益区',\n    610203: '印台区',\n    610204: '耀州区',\n    610222: '宜君县'\n  },\n  610300: {\n    610302: '渭滨区',\n    610303: '金台区',\n    610304: '陈仓区',\n    610322: '凤翔县',\n    610323: '岐山县',\n    610324: '扶风县',\n    610326: '眉县',\n    610327: '陇县',\n    610328: '千阳县',\n    610329: '麟游县',\n    610330: '凤县',\n    610331: '太白县'\n  },\n  610400: {\n    610402: '秦都区',\n    610403: '杨陵区',\n    610404: '渭城区',\n    610422: '三原县',\n    610423: '泾阳县',\n    610424: '乾县',\n    610425: '礼泉县',\n    610426: '永寿县',\n    610427: '彬县',\n    610428: '长武县',\n    610429: '旬邑县',\n    610430: '淳化县',\n    610431: '武功县',\n    610481: '兴平市'\n  },\n  610500: {\n    610502: '临渭区',\n    610503: '华州区',\n    610522: '潼关县',\n    610523: '大荔县',\n    610524: '合阳县',\n    610525: '澄城县',\n    610526: '蒲城县',\n    610527: '白水县',\n    610528: '富平县',\n    610581: '韩城市',\n    610582: '华阴市'\n  },\n  610600: {\n    610602: '宝塔区',\n    610621: '延长县',\n    610622: '延川县',\n    610623: '子长县',\n    610624: '安塞区',\n    610625: '志丹县',\n    610626: '吴起县',\n    610627: '甘泉县',\n    610628: '富县',\n    610629: '洛川县',\n    610630: '宜川县',\n    610631: '黄龙县',\n    610632: '黄陵县'\n  },\n  610700: {\n    610702: '汉台区',\n    610721: '南郑县',\n    610722: '城固县',\n    610723: '洋县',\n    610724: '西乡县',\n    610725: '勉县',\n    610726: '宁强县',\n    610727: '略阳县',\n    610728: '镇巴县',\n    610729: '留坝县',\n    610730: '佛坪县'\n  },\n  610800: {\n    610802: '榆阳区',\n    610803: '横山区',\n    610821: '神木县',\n    610822: '府谷县',\n    610824: '靖边县',\n    610825: '定边县',\n    610826: '绥德县',\n    610827: '米脂县',\n    610828: '佳县',\n    610829: '吴堡县',\n    610830: '清涧县',\n    610831: '子洲县'\n  },\n  610900: {\n    610902: '汉滨区',\n    610921: '汉阴县',\n    610922: '石泉县',\n    610923: '宁陕县',\n    610924: '紫阳县',\n    610925: '岚皋县',\n    610926: '平利县',\n    610927: '镇坪县',\n    610928: '旬阳县',\n    610929: '白河县'\n  },\n  611000: {\n    611002: '商州区',\n    611021: '洛南县',\n    611022: '丹凤县',\n    611023: '商南县',\n    611024: '山阳县',\n    611025: '镇安县',\n    611026: '柞水县'\n  },\n  620000: {\n    620100: '兰州市',\n    620200: '嘉峪关市',\n    620300: '金昌市',\n    620400: '白银市',\n    620500: '天水市',\n    620600: '武威市',\n    620700: '张掖市',\n    620800: '平凉市',\n    620900: '酒泉市',\n    621000: '庆阳市',\n    621100: '定西市',\n    621200: '陇南市',\n    622900: '临夏回族自治州',\n    623000: '甘南藏族自治州'\n  },\n  620100: {\n    620102: '城关区',\n    620103: '七里河区',\n    620104: '西固区',\n    620105: '安宁区',\n    620111: '红古区',\n    620121: '永登县',\n    620122: '皋兰县',\n    620123: '榆中县'\n  },\n  620300: {\n    620302: '金川区',\n    620321: '永昌县'\n  },\n  620400: {\n    620402: '白银区',\n    620403: '平川区',\n    620421: '靖远县',\n    620422: '会宁县',\n    620423: '景泰县'\n  },\n  620500: {\n    620502: '秦州区',\n    620503: '麦积区',\n    620521: '清水县',\n    620522: '秦安县',\n    620523: '甘谷县',\n    620524: '武山县',\n    620525: '张家川回族自治县'\n  },\n  620600: {\n    620602: '凉州区',\n    620621: '民勤县',\n    620622: '古浪县',\n    620623: '天祝藏族自治县'\n  },\n  620700: {\n    620702: '甘州区',\n    620721: '肃南裕固族自治县',\n    620722: '民乐县',\n    620723: '临泽县',\n    620724: '高台县',\n    620725: '山丹县'\n  },\n  620800: {\n    620802: '崆峒区',\n    620821: '泾川县',\n    620822: '灵台县',\n    620823: '崇信县',\n    620824: '华亭县',\n    620825: '庄浪县',\n    620826: '静宁县'\n  },\n  620900: {\n    620902: '肃州区',\n    620921: '金塔县',\n    620922: '瓜州县',\n    620923: '肃北蒙古族自治县',\n    620924: '阿克塞哈萨克族自治县',\n    620981: '玉门市',\n    620982: '敦煌市'\n  },\n  621000: {\n    621002: '西峰区',\n    621021: '庆城县',\n    621022: '环县',\n    621023: '华池县',\n    621024: '合水县',\n    621025: '正宁县',\n    621026: '宁县',\n    621027: '镇原县'\n  },\n  621100: {\n    621102: '安定区',\n    621121: '通渭县',\n    621122: '陇西县',\n    621123: '渭源县',\n    621124: '临洮县',\n    621125: '漳县',\n    621126: '岷县'\n  },\n  621200: {\n    621202: '武都区',\n    621221: '成县',\n    621222: '文县',\n    621223: '宕昌县',\n    621224: '康县',\n    621225: '西和县',\n    621226: '礼县',\n    621227: '徽县',\n    621228: '两当县'\n  },\n  622900: {\n    622901: '临夏市',\n    622921: '临夏县',\n    622922: '康乐县',\n    622923: '永靖县',\n    622924: '广河县',\n    622925: '和政县',\n    622926: '东乡族自治县',\n    622927: '积石山保安族东乡族撒拉族自治县'\n  },\n  623000: {\n    623001: '合作市',\n    623021: '临潭县',\n    623022: '卓尼县',\n    623023: '舟曲县',\n    623024: '迭部县',\n    623025: '玛曲县',\n    623026: '碌曲县',\n    623027: '夏河县'\n  },\n  630000: {\n    630100: '西宁市',\n    630200: '海东市',\n    632200: '海北藏族自治州',\n    632300: '黄南藏族自治州',\n    632500: '海南藏族自治州',\n    632600: '果洛藏族自治州',\n    632700: '玉树藏族自治州',\n    632800: '海西蒙古族藏族自治州'\n  },\n  630100: {\n    630102: '城东区',\n    630103: '城中区',\n    630104: '城西区',\n    630105: '城北区',\n    630121: '大通回族土族自治县',\n    630122: '湟中县',\n    630123: '湟源县'\n  },\n  630200: {\n    630202: '乐都区',\n    630203: '平安区',\n    630222: '民和回族土族自治县',\n    630223: '互助土族自治县',\n    630224: '化隆回族自治县',\n    630225: '循化撒拉族自治县'\n  },\n  632200: {\n    632221: '门源回族自治县',\n    632222: '祁连县',\n    632223: '海晏县',\n    632224: '刚察县'\n  },\n  632300: {\n    632321: '同仁县',\n    632322: '尖扎县',\n    632323: '泽库县',\n    632324: '河南蒙古族自治县'\n  },\n  632500: {\n    632521: '共和县',\n    632522: '同德县',\n    632523: '贵德县',\n    632524: '兴海县',\n    632525: '贵南县'\n  },\n  632600: {\n    632621: '玛沁县',\n    632622: '班玛县',\n    632623: '甘德县',\n    632624: '达日县',\n    632625: '久治县',\n    632626: '玛多县'\n  },\n  632700: {\n    632701: '玉树市',\n    632722: '杂多县',\n    632723: '称多县',\n    632724: '治多县',\n    632725: '囊谦县',\n    632726: '曲麻莱县'\n  },\n  632800: {\n    632801: '格尔木市',\n    632802: '德令哈市',\n    632821: '乌兰县',\n    632822: '都兰县',\n    632823: '天峻县',\n    632825: '海西蒙古族藏族自治州直辖'\n  },\n  640000: {\n    640100: '银川市',\n    640200: '石嘴山市',\n    640300: '吴忠市',\n    640400: '固原市',\n    640500: '中卫市'\n  },\n  640100: {\n    640104: '兴庆区',\n    640105: '西夏区',\n    640106: '金凤区',\n    640121: '永宁县',\n    640122: '贺兰县',\n    640181: '灵武市'\n  },\n  640200: {\n    640202: '大武口区',\n    640205: '惠农区',\n    640221: '平罗县'\n  },\n  640300: {\n    640302: '利通区',\n    640303: '红寺堡区',\n    640323: '盐池县',\n    640324: '同心县',\n    640381: '青铜峡市'\n  },\n  640400: {\n    640402: '原州区',\n    640422: '西吉县',\n    640423: '隆德县',\n    640424: '泾源县',\n    640425: '彭阳县'\n  },\n  640500: {\n    640502: '沙坡头区',\n    640521: '中宁县',\n    640522: '海原县'\n  },\n  650000: {\n    650100: '乌鲁木齐市',\n    650200: '克拉玛依市',\n    650400: '吐鲁番市',\n    650500: '哈密市',\n    652300: '昌吉回族自治州',\n    652700: '博尔塔拉蒙古自治州',\n    652800: '巴音郭楞蒙古自治州',\n    652900: '阿克苏地区',\n    653000: '克孜勒苏柯尔克孜自治州',\n    653100: '喀什地区',\n    653200: '和田地区',\n    654000: '伊犁哈萨克自治州',\n    654200: '塔城地区',\n    654300: '阿勒泰地区',\n    659001: '石河子市',\n    659002: '阿拉尔市',\n    659003: '图木舒克市',\n    659004: '五家渠市',\n    659005: '北屯市',\n    659006: '铁门关市',\n    659007: '双河市',\n    659008: '可克达拉市',\n    659009: '昆玉市'\n  },\n  650100: {\n    650102: '天山区',\n    650103: '沙依巴克区',\n    650104: '新市区',\n    650105: '水磨沟区',\n    650106: '头屯河区',\n    650107: '达坂城区',\n    650109: '米东区',\n    650121: '乌鲁木齐县'\n  },\n  650200: {\n    650202: '独山子区',\n    650203: '克拉玛依区',\n    650204: '白碱滩区',\n    650205: '乌尔禾区'\n  },\n  650400: {\n    650402: '高昌区',\n    650421: '鄯善县',\n    650422: '托克逊县'\n  },\n  650500: {\n    650502: '伊州区',\n    650521: '巴里坤哈萨克自治县',\n    650522: '伊吾县'\n  },\n  652300: {\n    652301: '昌吉市',\n    652302: '阜康市',\n    652323: '呼图壁县',\n    652324: '玛纳斯县',\n    652325: '奇台县',\n    652327: '吉木萨尔县',\n    652328: '木垒哈萨克自治县'\n  },\n  652700: {\n    652701: '博乐市',\n    652702: '阿拉山口市',\n    652722: '精河县',\n    652723: '温泉县'\n  },\n  652800: {\n    652801: '库尔勒市',\n    652822: '轮台县',\n    652823: '尉犁县',\n    652824: '若羌县',\n    652825: '且末县',\n    652826: '焉耆回族自治县',\n    652827: '和静县',\n    652828: '和硕县',\n    652829: '博湖县'\n  },\n  652900: {\n    652901: '阿克苏市',\n    652922: '温宿县',\n    652923: '库车县',\n    652924: '沙雅县',\n    652925: '新和县',\n    652926: '拜城县',\n    652927: '乌什县',\n    652928: '阿瓦提县',\n    652929: '柯坪县'\n  },\n  653000: {\n    653001: '阿图什市',\n    653022: '阿克陶县',\n    653023: '阿合奇县',\n    653024: '乌恰县'\n  },\n  653100: {\n    653101: '喀什市',\n    653121: '疏附县',\n    653122: '疏勒县',\n    653123: '英吉沙县',\n    653124: '泽普县',\n    653125: '莎车县',\n    653126: '叶城县',\n    653127: '麦盖提县',\n    653128: '岳普湖县',\n    653129: '伽师县',\n    653130: '巴楚县',\n    653131: '塔什库尔干塔吉克自治县'\n  },\n  653200: {\n    653201: '和田市',\n    653221: '和田县',\n    653222: '墨玉县',\n    653223: '皮山县',\n    653224: '洛浦县',\n    653225: '策勒县',\n    653226: '于田县',\n    653227: '民丰县'\n  },\n  654000: {\n    654002: '伊宁市',\n    654003: '奎屯市',\n    654004: '霍尔果斯市',\n    654021: '伊宁县',\n    654022: '察布查尔锡伯自治县',\n    654023: '霍城县',\n    654024: '巩留县',\n    654025: '新源县',\n    654026: '昭苏县',\n    654027: '特克斯县',\n    654028: '尼勒克县'\n  },\n  654200: {\n    654201: '塔城市',\n    654202: '乌苏市',\n    654221: '额敏县',\n    654223: '沙湾县',\n    654224: '托里县',\n    654225: '裕民县',\n    654226: '和布克赛尔蒙古自治县'\n  },\n  654300: {\n    654301: '阿勒泰市',\n    654321: '布尔津县',\n    654322: '富蕴县',\n    654323: '福海县',\n    654324: '哈巴河县',\n    654325: '青河县',\n    654326: '吉木乃县'\n  },\n  810000: {\n    810001: '中西区',\n    810002: '湾仔区',\n    810003: '东区',\n    810004: '南区',\n    810005: '油尖旺区',\n    810006: '深水埗区',\n    810007: '九龙城区',\n    810008: '黄大仙区',\n    810009: '观塘区',\n    810010: '荃湾区',\n    810011: '屯门区',\n    810012: '元朗区',\n    810013: '北区',\n    810014: '大埔区',\n    810015: '西贡区',\n    810016: '沙田区',\n    810017: '葵青区',\n    810018: '离岛区'\n  },\n  820000: {\n    820001: '花地玛堂区',\n    820002: '花王堂区',\n    820003: '望德堂区',\n    820004: '大堂区',\n    820005: '风顺堂区',\n    820006: '嘉模堂区',\n    820007: '路凼填海区',\n    820008: '圣方济各堂区'\n  }\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar set = function set(object, property, value, receiver) {\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent !== null) {\n      set(parent, property, value, receiver);\n    }\n  } else if (\"value\" in desc && desc.writable) {\n    desc.value = value;\n  } else {\n    var setter = desc.set;\n\n    if (setter !== undefined) {\n      setter.call(receiver, value);\n    }\n  }\n\n  return value;\n};\n\nvar NAMESPACE$1 = 'distpicker';\nvar EVENT_CHANGE = 'change.' + NAMESPACE$1;\nvar DEFAULT_CODE = 100000;\nvar PROVINCE = 'province';\nvar CITY = 'city';\nvar DISTRICT = 'district';\n\nvar Distpicker = function () {\n  function Distpicker(element, options) {\n    classCallCheck(this, Distpicker);\n\n    var self = this;\n\n    self.$element = $(element);\n    self.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options);\n    self.placeholders = $.extend({}, DEFAULTS);\n    self.ready = false;\n    self.init();\n  }\n\n  createClass(Distpicker, [{\n    key: 'init',\n    value: function init() {\n      var self = this;\n      var options = self.options;\n      var $selects = self.$element.find('select');\n      var length = $selects.length;\n      var data = {};\n\n      $selects.each(function (i, select) {\n        return $.extend(data, $(select).data());\n      });\n\n      $.each([PROVINCE, CITY, DISTRICT], function (i, type) {\n        if (data[type]) {\n          options[type] = data[type];\n          self['$' + type] = $selects.filter('[data-' + type + ']');\n        } else {\n          self['$' + type] = length > i ? $selects.eq(i) : null;\n        }\n      });\n\n      self.bind();\n\n      // Reset all the selects (after event binding)\n      self.reset();\n      self.ready = true;\n    }\n  }, {\n    key: 'bind',\n    value: function bind() {\n      var self = this;\n\n      if (self.$province) {\n        self.$province.on(EVENT_CHANGE, self.onChangeProvince = $.proxy(function () {\n          self.output(CITY);\n          self.output(DISTRICT);\n        }, self));\n      }\n\n      if (self.$city) {\n        self.$city.on(EVENT_CHANGE, self.onChangeCity = $.proxy(function () {\n          return self.output(DISTRICT);\n        }, self));\n      }\n    }\n  }, {\n    key: 'unbind',\n    value: function unbind() {\n      var self = this;\n\n      if (self.$province) {\n        self.$province.off(EVENT_CHANGE, self.onChangeProvince);\n      }\n\n      if (self.$city) {\n        self.$city.off(EVENT_CHANGE, self.onChangeCity);\n      }\n    }\n  }, {\n    key: 'output',\n    value: function output(type) {\n      var self = this;\n      var options = self.options;\n      var placeholders = self.placeholders;\n      var $select = self['$' + type];\n\n      if (!$select || !$select.length) {\n        return;\n      }\n\n      var code = void 0;\n\n      switch (type) {\n        case PROVINCE:\n          code = DEFAULT_CODE;\n          break;\n\n        case CITY:\n          code = self.$province && (self.$province.find(':selected').data('code') || '');\n          break;\n\n        case DISTRICT:\n          code = self.$city && (self.$city.find(':selected').data('code') || '');\n          break;\n      }\n\n      var districts = self.getDistricts(code);\n      var value = options[type];\n      var data = [];\n      var matched = false;\n\n      if ($.isPlainObject(districts)) {\n        $.each(districts, function (i, name) {\n          var selected = name === value;\n\n          if (options.valueType === 'code') {\n            selected = i === String(value);\n          }\n\n          if (selected) {\n            matched = true;\n          }\n\n          data.push({\n            code: i,\n            name: name,\n            value: options.valueType === 'name' ? name : i,\n            selected: selected\n          });\n        });\n      }\n\n      if (!matched) {\n        var autoselect = options.autoselect || options.autoSelect;\n\n        if (data.length && (type === PROVINCE && autoselect > 0 || type === CITY && autoselect > 1 || type === DISTRICT && autoselect > 2)) {\n          data[0].selected = true;\n        }\n\n        // Save the unmatched value as a placeholder at the first output\n        if (!self.ready && value) {\n          placeholders[type] = value;\n        }\n      }\n\n      // Add placeholder option\n      if (options.placeholder) {\n        data.unshift({\n          code: '',\n          name: placeholders[type],\n          value: '',\n          selected: false\n        });\n      }\n\n      if (data.length) {\n        $select.html(self.getList(data));\n      } else {\n        $select.empty();\n      }\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'getList',\n    value: function getList(data) {\n      var list = [];\n\n      $.each(data, function (i, n) {\n        var attrs = ['data-code=\"' + n.code + '\"', 'data-text=\"' + n.name + '\"', 'value=\"' + n.value + '\"'];\n\n        if (n.selected) {\n          attrs.push('selected');\n        }\n\n        list.push('<option ' + attrs.join(' ') + '>' + n.name + '</option>');\n      });\n\n      return list.join('');\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'getDistricts',\n    value: function getDistricts() {\n      var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CODE;\n\n      return DISTRICTS[code] || null;\n    }\n  }, {\n    key: 'reset',\n    value: function reset(deep) {\n      var self = this;\n\n      if (!deep) {\n        self.output(PROVINCE);\n        self.output(CITY);\n        self.output(DISTRICT);\n      } else if (self.$province) {\n        self.$province.find(':first').prop('selected', true).trigger(EVENT_CHANGE);\n      }\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      var self = this;\n\n      self.unbind();\n      self.$element.removeData(NAMESPACE$1);\n    }\n  }], [{\n    key: 'setDefaults',\n    value: function setDefaults(options) {\n      $.extend(DEFAULTS, $.isPlainObject(options) && options);\n    }\n  }]);\n  return Distpicker;\n}();\n\nvar NAMESPACE = 'distpicker';\nvar OtherDistpicker = $.fn.distpicker;\n\n$.fn.distpicker = function jQueryDistpicker(option) {\n  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  var result = void 0;\n\n  this.each(function each() {\n    var $this = $(this);\n    var data = $this.data(NAMESPACE);\n\n    if (!data) {\n      if (/destroy/.test(option)) {\n        return;\n      }\n\n      var options = $.extend({}, $this.data(), $.isPlainObject(option) && option);\n      $this.data(NAMESPACE, data = new Distpicker(this, options));\n    }\n\n    if (typeof option === 'string') {\n      var fn = data[option];\n\n      if ($.isFunction(fn)) {\n        result = fn.apply(data, args);\n      }\n    }\n  });\n\n  return typeof result !== 'undefined' ? result : this;\n};\n\n$.fn.distpicker.Constructor = Distpicker;\n$.fn.distpicker.setDefaults = Distpicker.setDefaults;\n\n$.fn.distpicker.noConflict = function noConflict() {\n  $.fn.distpicker = OtherDistpicker;\n  return this;\n};\n\n$(function () {\n  $('[data-toggle=\"distpicker\"]').distpicker();\n});\n\n})));\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/goodsManage.js",
    "content": "/**\n * Created by 文辉 on 2017/7/22.\n */\nvar activity = [];\nvar currentPage = 1;\n$(document).ready(function () {\n\n    var path = $(\"#path\").text();\n\n\n    to_page(path, 1);\n\n});\n\n/*$(document).ready(function () {\n    $(\".templatemo-edit-btn\").click(function () {\n        alert(\"asf\");\n        $(\"#update-goods\").modal({\n            backdrop:'static'\n        })\n    });\n});*/\n\n$(document).on(\"click\",\".description\",function () {\n    $(this).popover();\n});\n\n$(document).on(\"click\",\".templatemo-edit-btn\",function () {\n    $(\"#update-goods\").modal({\n        backdrop:'static'\n    });\n\n    //获取当前点击商品的数据\n    var upGoodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    var upGoodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var upGoodsPrice = $(this).parents(\"tr\").find(\"td:eq(2)\").text();\n    var upGoodsNum = $(this).parents(\"tr\").find(\"td:eq(3)\").text();\n    var upGoodsDetailCate = $(this).parents(\"tr\").find(\"td:eq(4)\").text();\n    var upGoodsDes = $(this).parents(\"tr\").find(\".description\").attr(\"data-content\");\n\n    $(\"#goodsid\").text(upGoodsid);\n    $(\"#goodsname\").val(upGoodsname);\n    $(\"#price\").val(upGoodsPrice);\n    $(\"#num\").val(upGoodsNum);\n    $(\"#detailcate\").val(upGoodsDetailCate);\n    $(\"#description\").val(upGoodsDes);\n});\n\n//修改商品信息\n$(document).on(\"click\",\"#saveUpdate\",function () {\n    var ugoodsid = $(\"#goodsid\").text();\n    var ugoodsname = $(\"#goodsname\").val();\n    var uprice = $(\"#price\").val();\n    var unum = $(\"#num\").val();\n    var udescription = $(\"#description\").val();\n    var ucategory = $(\"#category\").val();\n    var udetailcate = $(\"#detailcate\").val();\n\n    /*var option = {\n        url: '/shop/admin/goods/update/'+goodsid,\n        type:'post',\n    };\n    $(\"#update-goods\").ajaxForm(option);*/\n\n    $.ajax({\n        url:\"/shop/admin/goods/update/\",\n        type:\"POST\",\n        data:{\n            goodsid:ugoodsid,\n            goodsname:ugoodsname,\n            price:uprice,\n            num:unum,\n            description:udescription,\n            category:ucategory,\n            detailcate:udetailcate,\n        },\n        success:function(result){\n            $(\"#update-goods\").modal('hide');\n            swal(result.msg,'','success');\n            to_page('/shop',currentPage);\n        },\n        error:function(){\n            alert(\"错误！！\");\n        }\n    });\n\n    /*var goodsid = $(\"#goodsid\").text();\n    var updateForm = new FormData(document.getElementById(\"update-goods\"));\n    $.ajax({\n        url:\"/shop/admin/goods/update/\" + goodsid,\n        type:\"post\",\n        data:updateForm,\n        processData:false,\n        contentType:false,\n        success:function(result){\n            swal(result.msg,'','success');\n        },\n        error:function(){\n            alert(\"错误！！\");\n            window.clearInterval(timer);\n        }\n    });*/\n});\n\n$(document).on(\"click\",\".templatemo-delete-btn\",function () {\n    var goodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    swal({\n            title: \"确定删除\" + goodsname + \"吗？\",\n            type: \"warning\",\n            showCancelButton: true,\n            cancelButtonText:\"取消\",\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"确定删除！\",\n            closeOnConfirm: false,\n        },\n        function () {\n            /*swal(\"删除！\", \"你的虚拟文件已经被删除。\", \"success\");*/\n            $.ajax({\n                url: \"/shop/admin/goods/delete/\" + goodsid,\n                type: \"DELETE\",\n                success:function (result) {\n                    swal(result.msg, \"\",\"success\");\n                    to_page('/shop',currentPage);\n                },\n                error:function () {\n                    to_page('/shop',currentPage);\n                }\n            });\n        });\n});\n\n/*$(document).on(\"click\",\".templatemo-activity-btn\",function () {\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n\n});*/\n\nfunction showActInfo(activityId) {\n    $('#activityname').text(activity[activityId-1].activityname);\n    $('#activitydes').text(activity[activityId-1].activitydes);\n    $('#discount').text(activity[activityId-1].discount);\n    $('#fullprice').text(activity[activityId-1].fullprice);\n    $('#reduceprice').text(activity[activityId-1].reduceprice);\n    $('#fullnum').text(activity[activityId-1].fullnum);\n    $('#reducenum').text(activity[activityId-1].reducenum);\n}\n\n$(\"#activity-id\").change(function () {\n    showActInfo($(this).val());\n});\n\nfunction getActivity() {\n    $.ajax({\n        url: \"/shop/admin/activity/showjson\",\n        type: \"post\",\n        success: function (result) {\n            if(result.code==100) {\n                $(\"#activity-id\").empty();\n                activity = result.info.activity;\n                $.each(activity, function (index,item) {\n                    $(\"#activity-id\").append($(\"<option></option>\").attr(\"value\",item.activityid).append(item.activityid));\n                });\n                showActInfo(1);\n            } else {\n                alert(\"获取活动信息失败\");\n            }\n        }\n    });\n}\n\n//保存活动信息\n$(document).on(\"click\",\"#saveActivity\",function () {\n    var goodsid = $(\"#activity-goodsid\").text();\n    var activityid = $(\"#activity-id\").val();\n\n    $.ajax({\n        url:\"/shop/admin/activity/update/\",\n        type:\"POST\",\n        data:{\n            goodsid:goodsid,\n            activityid:activityid\n        },\n        success:function(result){\n            $(\"#activity-goods\").modal('hide');\n            swal(result.msg,'','success');\n            to_page('/shop', currentPage);\n        },\n        error:function(){\n            alert(\"错误！！\");\n        }\n    });\n});\n\nfunction to_page(path, page) {\n    $.ajax({\n        url: path + \"/admin/goods/showjson\",\n        data: \"page=\" + page,\n        type: \"get\",\n        success: function (result) {\n\n            //解析显示\n            build_goods_table(path, result);\n\n            //页面信息\n            build_page_info(path, result);\n\n            //分页\n            build_page_nav(path, result);\n\n            currentPage = page;\n        }\n    });\n}\n\nfunction build_goods_table(path,result) {\n    $(\"#goodsinfo tbody\").empty();\n    var goods = result.info.pageInfo.list;\n    $.each(goods, function (index,item) {\n        var goodsid = $(\"<td></td>\").append(item.goodsid);\n        var goodsname = $(\"<td></td>\").append(item.goodsname);\n        var price = $(\"<td></td>\").append(item.price);\n        var num = $(\"<td></td>\").append(item.num);\n        var detailcate = $(\"<td></td>\").append(item.detailcate);\n        var activityid = $(\"<td></td>\").append(item.activityid);\n\n        // var detailA = $('<a tabindex=\"0\" class=\"btn btn-sm description\" role=\"button\" placement=\"top\" data-toggle=\"popover\" data-trigger=\"focus\" title=\"描述\" ></a>').append(\"描述\");\n        var detailBtn = $('<button type=\"button\" class=\"description\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"top\"></button>').append(\"描述\");\n\n        detailBtn = detailBtn.attr(\"data-content\",item.description);\n\n        var detailA = $(\"<a></a>\").addClass(\"templatemo-link\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid).append(\"详情\");\n\n        var editBtn = $(\"<button></button>\").addClass(\"templatemo-edit-btn\").append(\"编辑\");\n        var deleteBtn = $(\"<button></button>\").addClass(\"templatemo-delete-btn\").append(\"删除\");\n\n        var desTd = $(\"<td hidden></td>\").append(detailBtn);\n\n        //活动按钮\n        var actBtn = $(\"<button></button>\").addClass(\"templatemo-activity-btn\").attr(\"data-actGoodsid\",item.goodsid).append(\"添加\");\n        actBtn.click(function () {\n            $(\"#activity-goods\").modal({\n                backdrop:'static'\n            });\n            $(\"#activity-goodsid\").text($(this).attr(\"data-actGoodsid\"));\n            getActivity();\n        });\n\n        var actTd = $(\"<td></td>\").append(actBtn);\n\n        var detailTd = $(\"<td></td>\").append(detailA);\n        var editTd = $(\"<td></td>\").append(editBtn);\n        var deleteTd = $(\"<td></td>\").append(deleteBtn);\n\n        $(\"<tr></tr>\").append(goodsid).append(goodsname).append(price).append(num).append(detailcate).append(activityid).append(desTd).append(detailTd).append(editTd).append(deleteTd).append(actTd).appendTo(\"#goodsinfo tbody\");\n    })\n}\n\nfunction build_page_info(path,result) {\n    $(\"#page-info-area\").empty();\n    $(\"#page-info-area\").append(\"当前第\"+ result.info.pageInfo.pageNum +\"页，总共\"+ result.info.pageInfo.pages +\"页，总共\"+ result.info.pageInfo.total +\"记录\")\n}\n\nfunction build_page_nav(path,result) {\n    $(\"#page-div-nav ul\").empty();\n    var pageUl = $(\"<ul></ul>\").addClass(\"pagination\")\n\n    var firstPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"首页\")));\n\n    var prePage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-backward\\\"></i></span>\")));\n\n    if(!result.info.pageInfo.hasPreviousPage) {\n        prePage.addClass(\"li-none\");\n    } else {\n        prePage.click(function () {\n            to_page('/shop',result.info.pageInfo.prePage);\n        });\n    }\n\n    //跳转\n    firstPage.click(function () {\n        to_page('/shop',1);\n    });\n\n    var nextPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-forward\\\"></i></span>\")));\n\n    var lastPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"末页\")));\n\n    if(!result.info.pageInfo.hasNextPage) {\n        nextPage.addClass(\"li-none\");\n    } else {\n        nextPage.click(function () {\n            to_page('/shop',result.info.pageInfo.nextPage);\n        });\n    }\n\n    lastPage.click(function () {\n        to_page('/shop',result.info.pageInfo.lastPage);\n    });\n\n    pageUl.append(firstPage).append(prePage);\n\n    $.each(result.info.pageInfo.navigatepageNums,function (index,item) {\n        var numLi = $(\"<li></li>\").append($(\"<a></a>\")\n            .append($(\"<span aria-hidden=\\\"true\\\"></span>\").append(item)));\n        if(result.info.pageInfo.pageNum === item) {\n            numLi.addClass(\"active\");\n        }\n        numLi.click(function () {\n            to_page('/shop',item);\n        });\n        pageUl.append(numLi);\n    });\n\n    pageUl.append(nextPage).append(lastPage).appendTo(\"#page-div-nav\");\n}\n\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/holder.js",
    "content": "/*!\n\nHolder - client side image placeholders\nVersion 2.9.0+f2dkw\n© 2015 Ivan Malopinsky - http://imsky.co\n\nSite:     http://holderjs.com\nIssues:   https://github.com/imsky/holder/issues\nLicense:  MIT\n\n*/\n(function (window) {\n  if (!window.document) return;\n  var document = window.document;\n\n  //https://github.com/inexorabletash/polyfill/blob/master/web.js\n    if (!document.querySelectorAll) {\n      document.querySelectorAll = function (selectors) {\n        var style = document.createElement('style'), elements = [], element;\n        document.documentElement.firstChild.appendChild(style);\n        document._qsa = [];\n\n        style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';\n        window.scrollBy(0, 0);\n        style.parentNode.removeChild(style);\n\n        while (document._qsa.length) {\n          element = document._qsa.shift();\n          element.style.removeAttribute('x-qsa');\n          elements.push(element);\n        }\n        document._qsa = null;\n        return elements;\n      };\n    }\n\n    if (!document.querySelector) {\n      document.querySelector = function (selectors) {\n        var elements = document.querySelectorAll(selectors);\n        return (elements.length) ? elements[0] : null;\n      };\n    }\n\n    if (!document.getElementsByClassName) {\n      document.getElementsByClassName = function (classNames) {\n        classNames = String(classNames).replace(/^|\\s+/g, '.');\n        return document.querySelectorAll(classNames);\n      };\n    }\n\n  //https://github.com/inexorabletash/polyfill\n  // ES5 15.2.3.14 Object.keys ( O )\n  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      if (o !== Object(o)) { throw TypeError('Object.keys called on non-object'); }\n      var ret = [], p;\n      for (p in o) {\n        if (Object.prototype.hasOwnProperty.call(o, p)) {\n          ret.push(p);\n        }\n      }\n      return ret;\n    };\n  }\n\n  // ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )\n  // From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach\n  if (!Array.prototype.forEach) {\n    Array.prototype.forEach = function (fun /*, thisp */) {\n      if (this === void 0 || this === null) { throw TypeError(); }\n\n      var t = Object(this);\n      var len = t.length >>> 0;\n      if (typeof fun !== \"function\") { throw TypeError(); }\n\n      var thisp = arguments[1], i;\n      for (i = 0; i < len; i++) {\n        if (i in t) {\n          fun.call(thisp, t[i], i, t);\n        }\n      }\n    };\n  }\n\n  //https://github.com/inexorabletash/polyfill/blob/master/web.js\n  (function (global) {\n    var B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    global.atob = global.atob || function (input) {\n      input = String(input);\n      var position = 0,\n          output = [],\n          buffer = 0, bits = 0, n;\n\n      input = input.replace(/\\s/g, '');\n      if ((input.length % 4) === 0) { input = input.replace(/=+$/, ''); }\n      if ((input.length % 4) === 1) { throw Error('InvalidCharacterError'); }\n      if (/[^+/0-9A-Za-z]/.test(input)) { throw Error('InvalidCharacterError'); }\n\n      while (position < input.length) {\n        n = B64_ALPHABET.indexOf(input.charAt(position));\n        buffer = (buffer << 6) | n;\n        bits += 6;\n\n        if (bits === 24) {\n          output.push(String.fromCharCode((buffer >> 16) & 0xFF));\n          output.push(String.fromCharCode((buffer >>  8) & 0xFF));\n          output.push(String.fromCharCode(buffer & 0xFF));\n          bits = 0;\n          buffer = 0;\n        }\n        position += 1;\n      }\n\n      if (bits === 12) {\n        buffer = buffer >> 4;\n        output.push(String.fromCharCode(buffer & 0xFF));\n      } else if (bits === 18) {\n        buffer = buffer >> 2;\n        output.push(String.fromCharCode((buffer >> 8) & 0xFF));\n        output.push(String.fromCharCode(buffer & 0xFF));\n      }\n\n      return output.join('');\n    };\n\n    global.btoa = global.btoa || function (input) {\n      input = String(input);\n      var position = 0,\n          out = [],\n          o1, o2, o3,\n          e1, e2, e3, e4;\n\n      if (/[^\\x00-\\xFF]/.test(input)) { throw Error('InvalidCharacterError'); }\n\n      while (position < input.length) {\n        o1 = input.charCodeAt(position++);\n        o2 = input.charCodeAt(position++);\n        o3 = input.charCodeAt(position++);\n\n        // 111111 112222 222233 333333\n        e1 = o1 >> 2;\n        e2 = ((o1 & 0x3) << 4) | (o2 >> 4);\n        e3 = ((o2 & 0xf) << 2) | (o3 >> 6);\n        e4 = o3 & 0x3f;\n\n        if (position === input.length + 2) {\n          e3 = 64; e4 = 64;\n        }\n        else if (position === input.length + 1) {\n          e4 = 64;\n        }\n\n        out.push(B64_ALPHABET.charAt(e1),\n                 B64_ALPHABET.charAt(e2),\n                 B64_ALPHABET.charAt(e3),\n                 B64_ALPHABET.charAt(e4));\n      }\n\n      return out.join('');\n    };\n  }(window));\n\n  //https://gist.github.com/jimeh/332357\n  if (!Object.prototype.hasOwnProperty){\n      /*jshint -W001, -W103 */\n      Object.prototype.hasOwnProperty = function(prop) {\n      var proto = this.__proto__ || this.constructor.prototype;\n      return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);\n    };\n      /*jshint +W001, +W103 */\n  }\n\n  // @license http://opensource.org/licenses/MIT\n  // copyright Paul Irish 2015\n\n\n  // Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill\n  //   github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js\n  // as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values\n\n  // if you want values similar to what you'd get with real perf.now, place this towards the head of the page\n  // but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed\n\n\n  (function(){\n\n    if ('performance' in window === false) {\n        window.performance = {};\n    }\n    \n    Date.now = (Date.now || function () {  // thanks IE8\n      return new Date().getTime();\n    });\n\n    if ('now' in window.performance === false){\n      \n      var nowOffset = Date.now();\n      \n      if (performance.timing && performance.timing.navigationStart){\n        nowOffset = performance.timing.navigationStart;\n      }\n\n      window.performance.now = function now(){\n        return Date.now() - nowOffset;\n      };\n    }\n\n  })();\n\n  //requestAnimationFrame polyfill for older Firefox/Chrome versions\n  if (!window.requestAnimationFrame) {\n    if (window.webkitRequestAnimationFrame) {\n    //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-webkit.js\n    (function (global) {\n      // window.requestAnimationFrame\n      global.requestAnimationFrame = function (callback) {\n        return webkitRequestAnimationFrame(function () {\n          callback(global.performance.now());\n        });\n      };\n\n      // window.cancelAnimationFrame\n      global.cancelAnimationFrame = webkitCancelAnimationFrame;\n    }(window));\n    } else if (window.mozRequestAnimationFrame) {\n      //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-moz.js\n    (function (global) {\n      // window.requestAnimationFrame\n      global.requestAnimationFrame = function (callback) {\n        return mozRequestAnimationFrame(function () {\n          callback(global.performance.now());\n        });\n      };\n\n      // window.cancelAnimationFrame\n      global.cancelAnimationFrame = mozCancelAnimationFrame;\n    }(window));\n    } else {\n    (function (global) {\n      global.requestAnimationFrame = function (callback) {\n      return global.setTimeout(callback, 1000 / 60);\n      };\n\n      global.cancelAnimationFrame = global.clearTimeout;\n    })(window);\n    }\n  }\n})(this);\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Holder\"] = factory();\n\telse\n\t\troot[\"Holder\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*\n\tHolder.js - client side image placeholders\n\t(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n\t*/\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/*\n\tHolder.js - client side image placeholders\n\t(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n\t*/\n\n\t//Libraries and functions\n\tvar onDomReady = __webpack_require__(2);\n\tvar querystring = __webpack_require__(3);\n\n\tvar SceneGraph = __webpack_require__(6);\n\tvar utils = __webpack_require__(7);\n\tvar SVG = __webpack_require__(8);\n\tvar DOM = __webpack_require__(9);\n\tvar Color = __webpack_require__(10);\n\tvar constants = __webpack_require__(11);\n\n\tvar svgRenderer = __webpack_require__(12);\n\tvar sgCanvasRenderer = __webpack_require__(15);\n\n\tvar extend = utils.extend;\n\tvar dimensionCheck = utils.dimensionCheck;\n\n\t//Constants and definitions\n\tvar SVG_NS = constants.svg_ns;\n\n\tvar Holder = {\n\t    version: constants.version,\n\n\t    /**\n\t     * Adds a theme to default settings\n\t     *\n\t     * @param {string} name Theme name\n\t     * @param {Object} theme Theme object, with foreground, background, size, font, and fontweight properties.\n\t     */\n\t    addTheme: function(name, theme) {\n\t        name != null && theme != null && (App.settings.themes[name] = theme);\n\t        delete App.vars.cache.themeKeys;\n\t        return this;\n\t    },\n\n\t    /**\n\t     * Appends a placeholder to an element\n\t     *\n\t     * @param {string} src Placeholder URL string\n\t     * @param el A selector or a reference to a DOM node\n\t     */\n\t    addImage: function(src, el) {\n\t        //todo: use jquery fallback if available for all QSA references\n\t        var nodes = DOM.getNodeArray(el);\n\t        nodes.forEach(function (node) {\n\t            var img = DOM.newEl('img');\n\t            var domProps = {};\n\t            domProps[App.setup.dataAttr] = src;\n\t            DOM.setAttr(img, domProps);\n\t            node.appendChild(img);\n\t        });\n\t        return this;\n\t    },\n\n\t    /**\n\t     * Sets whether or not an image is updated on resize.\n\t     * If an image is set to be updated, it is immediately rendered.\n\t     *\n\t     * @param {Object} el Image DOM element\n\t     * @param {Boolean} value Resizable update flag value\n\t     */\n\t    setResizeUpdate: function(el, value) {\n\t        if (el.holderData) {\n\t            el.holderData.resizeUpdate = !!value;\n\t            if (el.holderData.resizeUpdate) {\n\t                updateResizableElements(el);\n\t            }\n\t        }\n\t    },\n\n\t    /**\n\t     * Runs Holder with options. By default runs Holder on all images with \"holder.js\" in their source attributes.\n\t     *\n\t     * @param {Object} userOptions Options object, can contain domain, themes, images, and bgnodes properties\n\t     */\n\t    run: function(userOptions) {\n\t        //todo: split processing into separate queues\n\t        userOptions = userOptions || {};\n\t        var engineSettings = {};\n\t        var options = extend(App.settings, userOptions);\n\n\t        App.vars.preempted = true;\n\t        App.vars.dataAttr = options.dataAttr || App.setup.dataAttr;\n\n\t        engineSettings.renderer = options.renderer ? options.renderer : App.setup.renderer;\n\t        if (App.setup.renderers.join(',').indexOf(engineSettings.renderer) === -1) {\n\t            engineSettings.renderer = App.setup.supportsSVG ? 'svg' : (App.setup.supportsCanvas ? 'canvas' : 'html');\n\t        }\n\n\t        var images = DOM.getNodeArray(options.images);\n\t        var bgnodes = DOM.getNodeArray(options.bgnodes);\n\t        var stylenodes = DOM.getNodeArray(options.stylenodes);\n\t        var objects = DOM.getNodeArray(options.objects);\n\n\t        engineSettings.stylesheets = [];\n\t        engineSettings.svgXMLStylesheet = true;\n\t        engineSettings.noFontFallback = options.noFontFallback ? options.noFontFallback : false;\n\n\t        stylenodes.forEach(function (styleNode) {\n\t            if (styleNode.attributes.rel && styleNode.attributes.href && styleNode.attributes.rel.value == 'stylesheet') {\n\t                var href = styleNode.attributes.href.value;\n\t                //todo: write isomorphic relative-to-absolute URL function\n\t                var proxyLink = DOM.newEl('a');\n\t                proxyLink.href = href;\n\t                var stylesheetURL = proxyLink.protocol + '//' + proxyLink.host + proxyLink.pathname + proxyLink.search;\n\t                engineSettings.stylesheets.push(stylesheetURL);\n\t            }\n\t        });\n\n\t        bgnodes.forEach(function (bgNode) {\n\t            //Skip processing background nodes if getComputedStyle is unavailable, since only modern browsers would be able to use canvas or SVG to render to background\n\t            if (!global.getComputedStyle) return;\n\t            var backgroundImage = global.getComputedStyle(bgNode, null).getPropertyValue('background-image');\n\t            var dataBackgroundImage = bgNode.getAttribute('data-background-src');\n\t            var rawURL = dataBackgroundImage || backgroundImage;\n\n\t            var holderURL = null;\n\t            var holderString = options.domain + '/';\n\t            var holderStringIndex = rawURL.indexOf(holderString);\n\n\t            if (holderStringIndex === 0) {\n\t                holderURL = rawURL;\n\t            } else if (holderStringIndex === 1 && rawURL[0] === '?') {\n\t                holderURL = rawURL.slice(1);\n\t            } else {\n\t                var fragment = rawURL.substr(holderStringIndex).match(/([^\\\"]*)\"?\\)/);\n\t                if (fragment !== null) {\n\t                    holderURL = fragment[1];\n\t                } else if (rawURL.indexOf('url(') === 0) {\n\t                    throw 'Holder: unable to parse background URL: ' + rawURL;\n\t                }\n\t            }\n\n\t            if (holderURL != null) {\n\t                var holderFlags = parseURL(holderURL, options);\n\t                if (holderFlags) {\n\t                    prepareDOMElement({\n\t                        mode: 'background',\n\t                        el: bgNode,\n\t                        flags: holderFlags,\n\t                        engineSettings: engineSettings\n\t                    });\n\t                }\n\t            }\n\t        });\n\n\t        objects.forEach(function (object) {\n\t            var objectAttr = {};\n\n\t            try {\n\t                objectAttr.data = object.getAttribute('data');\n\t                objectAttr.dataSrc = object.getAttribute(App.vars.dataAttr);\n\t            } catch (e) {}\n\n\t            var objectHasSrcURL = objectAttr.data != null && objectAttr.data.indexOf(options.domain) === 0;\n\t            var objectHasDataSrcURL = objectAttr.dataSrc != null && objectAttr.dataSrc.indexOf(options.domain) === 0;\n\n\t            if (objectHasSrcURL) {\n\t                prepareImageElement(options, engineSettings, objectAttr.data, object);\n\t            } else if (objectHasDataSrcURL) {\n\t                prepareImageElement(options, engineSettings, objectAttr.dataSrc, object);\n\t            }\n\t        });\n\n\t        images.forEach(function (image) {\n\t            var imageAttr = {};\n\n\t            try {\n\t                imageAttr.src = image.getAttribute('src');\n\t                imageAttr.dataSrc = image.getAttribute(App.vars.dataAttr);\n\t                imageAttr.rendered = image.getAttribute('data-holder-rendered');\n\t            } catch (e) {}\n\n\t            var imageHasSrc = imageAttr.src != null;\n\t            var imageHasDataSrcURL = imageAttr.dataSrc != null && imageAttr.dataSrc.indexOf(options.domain) === 0;\n\t            var imageRendered = imageAttr.rendered != null && imageAttr.rendered == 'true';\n\n\t            if (imageHasSrc) {\n\t                if (imageAttr.src.indexOf(options.domain) === 0) {\n\t                    prepareImageElement(options, engineSettings, imageAttr.src, image);\n\t                } else if (imageHasDataSrcURL) {\n\t                    //Image has a valid data-src and an invalid src\n\t                    if (imageRendered) {\n\t                        //If the placeholder has already been render, re-render it\n\t                        prepareImageElement(options, engineSettings, imageAttr.dataSrc, image);\n\t                    } else {\n\t                        //If the placeholder has not been rendered, check if the image exists and render a fallback if it doesn't\n\t                        (function(src, options, engineSettings, dataSrc, image) {\n\t                            utils.imageExists(src, function(exists) {\n\t                                if (!exists) {\n\t                                    prepareImageElement(options, engineSettings, dataSrc, image);\n\t                                }\n\t                            });\n\t                        })(imageAttr.src, options, engineSettings, imageAttr.dataSrc, image);\n\t                    }\n\t                }\n\t            } else if (imageHasDataSrcURL) {\n\t                prepareImageElement(options, engineSettings, imageAttr.dataSrc, image);\n\t            }\n\t        });\n\n\t        return this;\n\t    }\n\t};\n\n\tvar App = {\n\t    settings: {\n\t        domain: 'holder.js',\n\t        images: 'img',\n\t        objects: 'object',\n\t        bgnodes: 'body .holderjs',\n\t        stylenodes: 'head link.holderjs',\n\t        themes: {\n\t            'gray': {\n\t                bg: '#EEEEEE',\n\t                fg: '#AAAAAA'\n\t            },\n\t            'social': {\n\t                bg: '#3a5a97',\n\t                fg: '#FFFFFF'\n\t            },\n\t            'industrial': {\n\t                bg: '#434A52',\n\t                fg: '#C2F200'\n\t            },\n\t            'sky': {\n\t                bg: '#0D8FDB',\n\t                fg: '#FFFFFF'\n\t            },\n\t            'vine': {\n\t                bg: '#39DBAC',\n\t                fg: '#1E292C'\n\t            },\n\t            'lava': {\n\t                bg: '#F8591A',\n\t                fg: '#1C2846'\n\t            }\n\t        }\n\t    },\n\t    defaults: {\n\t        size: 10,\n\t        units: 'pt',\n\t        scale: 1 / 16\n\t    }\n\t};\n\n\t/**\n\t * Processes provided source attribute and sets up the appropriate rendering workflow\n\t *\n\t * @private\n\t * @param options Instance options from Holder.run\n\t * @param renderSettings Instance configuration\n\t * @param src Image URL\n\t * @param el Image DOM element\n\t */\n\tfunction prepareImageElement(options, engineSettings, src, el) {\n\t    var holderFlags = parseURL(src.substr(src.lastIndexOf(options.domain)), options);\n\t    if (holderFlags) {\n\t        prepareDOMElement({\n\t            mode: null,\n\t            el: el,\n\t            flags: holderFlags,\n\t            engineSettings: engineSettings\n\t        });\n\t    }\n\t}\n\n\t/**\n\t * Processes a Holder URL and extracts configuration from query string\n\t *\n\t * @private\n\t * @param url URL\n\t * @param instanceOptions Instance options from Holder.run\n\t */\n\tfunction parseURL(url, instanceOptions) {\n\t    var holder = {\n\t        theme: extend(App.settings.themes.gray, null),\n\t        stylesheets: instanceOptions.stylesheets,\n\t        instanceOptions: instanceOptions\n\t    };\n\n\t    var parts = url.split('?');\n\t    var basics = parts[0].split('/');\n\n\t    holder.holderURL = url;\n\n\t    var dimensions = basics[1];\n\t    var dimensionData = dimensions.match(/([\\d]+p?)x([\\d]+p?)/);\n\n\t    if (!dimensionData) return false;\n\n\t    holder.fluid = dimensions.indexOf('p') !== -1;\n\n\t    holder.dimensions = {\n\t        width: dimensionData[1].replace('p', '%'),\n\t        height: dimensionData[2].replace('p', '%')\n\t    };\n\n\t    if (parts.length === 2) {\n\t        var options = querystring.parse(parts[1]);\n\n\t        // Colors\n\n\t        if (options.bg) {\n\t            holder.theme.bg = utils.parseColor(options.bg);\n\t        }\n\n\t        if (options.fg) {\n\t            holder.theme.fg = utils.parseColor(options.fg);\n\t        }\n\n\t        //todo: add automatic foreground to themes without foreground\n\t        if (options.bg && !options.fg) {\n\t            holder.autoFg = true;\n\t        }\n\n\t        if (options.theme && holder.instanceOptions.themes.hasOwnProperty(options.theme)) {\n\t            holder.theme = extend(holder.instanceOptions.themes[options.theme], null);\n\t        }\n\n\t        // Text\n\n\t        if (options.text) {\n\t            holder.text = options.text;\n\t        }\n\n\t        if (options.textmode) {\n\t            holder.textmode = options.textmode;\n\t        }\n\n\t        if (options.size) {\n\t            holder.size = options.size;\n\t        }\n\n\t        if (options.font) {\n\t            holder.font = options.font;\n\t        }\n\n\t        if (options.align) {\n\t            holder.align = options.align;\n\t        }\n\n\t        if (options.lineWrap) {\n\t            holder.lineWrap = options.lineWrap;\n\t        }\n\n\t        holder.nowrap = utils.truthy(options.nowrap);\n\n\t        // Miscellaneous\n\n\t        holder.auto = utils.truthy(options.auto);\n\n\t        holder.outline = utils.truthy(options.outline);\n\n\t        if (utils.truthy(options.random)) {\n\t            App.vars.cache.themeKeys = App.vars.cache.themeKeys || Object.keys(holder.instanceOptions.themes);\n\t            var _theme = App.vars.cache.themeKeys[0 | Math.random() * App.vars.cache.themeKeys.length];\n\t            holder.theme = extend(holder.instanceOptions.themes[_theme], null);\n\t        }\n\t    }\n\n\t    return holder;\n\t}\n\n\t/**\n\t * Modifies the DOM to fit placeholders and sets up resizable image callbacks (for fluid and automatically sized placeholders)\n\t *\n\t * @private\n\t * @param settings DOM prep settings\n\t */\n\tfunction prepareDOMElement(prepSettings) {\n\t    var mode = prepSettings.mode;\n\t    var el = prepSettings.el;\n\t    var flags = prepSettings.flags;\n\t    var _engineSettings = prepSettings.engineSettings;\n\t    var dimensions = flags.dimensions,\n\t        theme = flags.theme;\n\t    var dimensionsCaption = dimensions.width + 'x' + dimensions.height;\n\t    mode = mode == null ? (flags.fluid ? 'fluid' : 'image') : mode;\n\t    var holderTemplateRe = /holder_([a-z]+)/g;\n\t    var dimensionsInText = false;\n\n\t    if (flags.text != null) {\n\t        theme.text = flags.text;\n\n\t        //<object> SVG embedding doesn't parse Unicode properly\n\t        if (el.nodeName.toLowerCase() === 'object') {\n\t            var textLines = theme.text.split('\\\\n');\n\t            for (var k = 0; k < textLines.length; k++) {\n\t                textLines[k] = utils.encodeHtmlEntity(textLines[k]);\n\t            }\n\t            theme.text = textLines.join('\\\\n');\n\t        }\n\t    }\n\n\t    if (theme.text) {\n\t        var holderTemplateMatches = theme.text.match(holderTemplateRe);\n\n\t        if (holderTemplateMatches !== null) {\n\t            //todo: optimize template replacement\n\t            holderTemplateMatches.forEach(function (match) {\n\t                if (match === 'holder_dimensions') {\n\t                    theme.text = theme.text.replace(match, dimensionsCaption);\n\t                }\n\t            });\n\t        }\n\t    }\n\n\t    var holderURL = flags.holderURL;\n\t    var engineSettings = extend(_engineSettings, null);\n\n\t    if (flags.font) {\n\t        /*\n\t        If external fonts are used in a <img> placeholder rendered with SVG, Holder falls back to canvas.\n\n\t        This is done because Firefox and Chrome disallow embedded SVGs from referencing external assets.\n\t        The workaround is either to change the placeholder tag from <img> to <object> or to use the canvas renderer.\n\t        */\n\t        theme.font = flags.font;\n\t        if (!engineSettings.noFontFallback && el.nodeName.toLowerCase() === 'img' && App.setup.supportsCanvas && engineSettings.renderer === 'svg') {\n\t            engineSettings = extend(engineSettings, {\n\t                renderer: 'canvas'\n\t            });\n\t        }\n\t    }\n\n\t    //Chrome and Opera require a quick 10ms re-render if web fonts are used with canvas\n\t    if (flags.font && engineSettings.renderer == 'canvas') {\n\t        engineSettings.reRender = true;\n\t    }\n\n\t    if (mode == 'background') {\n\t        if (el.getAttribute('data-background-src') == null) {\n\t            DOM.setAttr(el, {\n\t                'data-background-src': holderURL\n\t            });\n\t        }\n\t    } else {\n\t        var domProps = {};\n\t        domProps[App.vars.dataAttr] = holderURL;\n\t        DOM.setAttr(el, domProps);\n\t    }\n\n\t    flags.theme = theme;\n\n\t    //todo consider using all renderSettings in holderData\n\t    el.holderData = {\n\t        flags: flags,\n\t        engineSettings: engineSettings\n\t    };\n\n\t    if (mode == 'image' || mode == 'fluid') {\n\t        DOM.setAttr(el, {\n\t            'alt': theme.text ? (dimensionsInText ? theme.text : theme.text + ' [' + dimensionsCaption + ']') : dimensionsCaption\n\t        });\n\t    }\n\n\t    var renderSettings = {\n\t        mode: mode,\n\t        el: el,\n\t        holderSettings: {\n\t            dimensions: dimensions,\n\t            theme: theme,\n\t            flags: flags\n\t        },\n\t        engineSettings: engineSettings\n\t    };\n\n\t    if (mode == 'image') {\n\t        if (!flags.auto) {\n\t            el.style.width = dimensions.width + 'px';\n\t            el.style.height = dimensions.height + 'px';\n\t        }\n\n\t        if (engineSettings.renderer == 'html') {\n\t            el.style.backgroundColor = theme.background;\n\t        } else {\n\t            render(renderSettings);\n\n\t            if (flags.textmode == 'exact') {\n\t                el.holderData.resizeUpdate = true;\n\t                App.vars.resizableImages.push(el);\n\t                updateResizableElements(el);\n\t            }\n\t        }\n\t    } else if (mode == 'background' && engineSettings.renderer != 'html') {\n\t        render(renderSettings);\n\t    } else if (mode == 'fluid') {\n\t        el.holderData.resizeUpdate = true;\n\n\t        if (dimensions.height.slice(-1) == '%') {\n\t            el.style.height = dimensions.height;\n\t        } else if (flags.auto == null || !flags.auto) {\n\t            el.style.height = dimensions.height + 'px';\n\t        }\n\t        if (dimensions.width.slice(-1) == '%') {\n\t            el.style.width = dimensions.width;\n\t        } else if (flags.auto == null || !flags.auto) {\n\t            el.style.width = dimensions.width + 'px';\n\t        }\n\t        if (el.style.display == 'inline' || el.style.display === '' || el.style.display == 'none') {\n\t            el.style.display = 'block';\n\t        }\n\n\t        setInitialDimensions(el);\n\n\t        if (engineSettings.renderer == 'html') {\n\t            el.style.backgroundColor = theme.background;\n\t        } else {\n\t            App.vars.resizableImages.push(el);\n\t            updateResizableElements(el);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Core function that takes output from renderers and sets it as the source or background-image of the target element\n\t *\n\t * @private\n\t * @param renderSettings Renderer settings\n\t */\n\tfunction render(renderSettings) {\n\t    var image = null;\n\t    var mode = renderSettings.mode;\n\t    var el = renderSettings.el;\n\t    var holderSettings = renderSettings.holderSettings;\n\t    var engineSettings = renderSettings.engineSettings;\n\n\t    switch (engineSettings.renderer) {\n\t        case 'svg':\n\t            if (!App.setup.supportsSVG) return;\n\t            break;\n\t        case 'canvas':\n\t            if (!App.setup.supportsCanvas) return;\n\t            break;\n\t        default:\n\t            return;\n\t    }\n\n\t    //todo: move generation of scene up to flag generation to reduce extra object creation\n\t    var scene = {\n\t        width: holderSettings.dimensions.width,\n\t        height: holderSettings.dimensions.height,\n\t        theme: holderSettings.theme,\n\t        flags: holderSettings.flags\n\t    };\n\n\t    var sceneGraph = buildSceneGraph(scene);\n\n\t    function getRenderedImage() {\n\t        var image = null;\n\t        switch (engineSettings.renderer) {\n\t            case 'canvas':\n\t                image = sgCanvasRenderer(sceneGraph, renderSettings);\n\t                break;\n\t            case 'svg':\n\t                image = svgRenderer(sceneGraph, renderSettings);\n\t                break;\n\t            default:\n\t                throw 'Holder: invalid renderer: ' + engineSettings.renderer;\n\t        }\n\n\t        return image;\n\t    }\n\n\t    image = getRenderedImage();\n\n\t    if (image == null) {\n\t        throw 'Holder: couldn\\'t render placeholder';\n\t    }\n\n\t    //todo: add <object> canvas rendering\n\t    if (mode == 'background') {\n\t        el.style.backgroundImage = 'url(' + image + ')';\n\t        el.style.backgroundSize = scene.width + 'px ' + scene.height + 'px';\n\t    } else {\n\t        if (el.nodeName.toLowerCase() === 'img') {\n\t            DOM.setAttr(el, {\n\t                'src': image\n\t            });\n\t        } else if (el.nodeName.toLowerCase() === 'object') {\n\t            DOM.setAttr(el, {\n\t                'data': image,\n\t                'type': 'image/svg+xml'\n\t            });\n\t        }\n\t        if (engineSettings.reRender) {\n\t            global.setTimeout(function () {\n\t                var image = getRenderedImage();\n\t                if (image == null) {\n\t                    throw 'Holder: couldn\\'t render placeholder';\n\t                }\n\t                //todo: refactor this code into a function\n\t                if (el.nodeName.toLowerCase() === 'img') {\n\t                    DOM.setAttr(el, {\n\t                        'src': image\n\t                    });\n\t                } else if (el.nodeName.toLowerCase() === 'object') {\n\t                    DOM.setAttr(el, {\n\t                        'data': image,\n\t                        'type': 'image/svg+xml'\n\t                    });\n\t                }\n\t            }, 150);\n\t        }\n\t    }\n\t    //todo: account for re-rendering\n\t    DOM.setAttr(el, {\n\t        'data-holder-rendered': true\n\t    });\n\t}\n\n\t/**\n\t * Core function that takes a Holder scene description and builds a scene graph\n\t *\n\t * @private\n\t * @param scene Holder scene object\n\t */\n\t//todo: make this function reusable\n\t//todo: merge app defaults and setup properties into the scene argument\n\tfunction buildSceneGraph(scene) {\n\t    var fontSize = App.defaults.size;\n\t    if (parseFloat(scene.theme.size)) {\n\t        fontSize = scene.theme.size;\n\t    } else if (parseFloat(scene.flags.size)) {\n\t        fontSize = scene.flags.size;\n\t    }\n\n\t    scene.font = {\n\t        family: scene.theme.font ? scene.theme.font : 'Arial, Helvetica, Open Sans, sans-serif',\n\t        size: textSize(scene.width, scene.height, fontSize, App.defaults.scale),\n\t        units: scene.theme.units ? scene.theme.units : App.defaults.units,\n\t        weight: scene.theme.fontweight ? scene.theme.fontweight : 'bold'\n\t    };\n\n\t    scene.text = scene.theme.text || Math.floor(scene.width) + 'x' + Math.floor(scene.height);\n\n\t    scene.noWrap = scene.theme.nowrap || scene.flags.nowrap;\n\n\t    scene.align = scene.theme.align || scene.flags.align || 'center';\n\n\t    switch (scene.flags.textmode) {\n\t        case 'literal':\n\t            scene.text = scene.flags.dimensions.width + 'x' + scene.flags.dimensions.height;\n\t            break;\n\t        case 'exact':\n\t            if (!scene.flags.exactDimensions) break;\n\t            scene.text = Math.floor(scene.flags.exactDimensions.width) + 'x' + Math.floor(scene.flags.exactDimensions.height);\n\t            break;\n\t    }\n\n\t    var lineWrap = scene.flags.lineWrap || App.setup.lineWrapRatio;\n\t    var sceneMargin = scene.width * lineWrap;\n\t    var maxLineWidth = sceneMargin;\n\n\t    var sceneGraph = new SceneGraph({\n\t        width: scene.width,\n\t        height: scene.height\n\t    });\n\n\t    var Shape = sceneGraph.Shape;\n\n\t    var holderBg = new Shape.Rect('holderBg', {\n\t        fill: scene.theme.bg\n\t    });\n\n\t    holderBg.resize(scene.width, scene.height);\n\t    sceneGraph.root.add(holderBg);\n\n\t    if (scene.flags.outline) {\n\t        var outlineColor = new Color(holderBg.properties.fill);\n\t        outlineColor = outlineColor.lighten(outlineColor.lighterThan('7f7f7f') ? -0.1 : 0.1);\n\t        holderBg.properties.outline = {\n\t            fill: outlineColor.toHex(true),\n\t            width: 2\n\t        };\n\t    }\n\n\t    var holderTextColor = scene.theme.fg;\n\n\t    if (scene.flags.autoFg) {\n\t        var holderBgColor = new Color(holderBg.properties.fill);\n\t        var lightColor = new Color('fff');\n\t        var darkColor = new Color('000', {\n\t            'alpha': 0.285714\n\t        });\n\n\t        holderTextColor = holderBgColor.blendAlpha(holderBgColor.lighterThan('7f7f7f') ? darkColor : lightColor).toHex(true);\n\t    }\n\n\t    var holderTextGroup = new Shape.Group('holderTextGroup', {\n\t        text: scene.text,\n\t        align: scene.align,\n\t        font: scene.font,\n\t        fill: holderTextColor\n\t    });\n\n\t    holderTextGroup.moveTo(null, null, 1);\n\t    sceneGraph.root.add(holderTextGroup);\n\n\t    var tpdata = holderTextGroup.textPositionData = stagingRenderer(sceneGraph);\n\t    if (!tpdata) {\n\t        throw 'Holder: staging fallback not supported yet.';\n\t    }\n\t    holderTextGroup.properties.leading = tpdata.boundingBox.height;\n\n\t    var textNode = null;\n\t    var line = null;\n\n\t    function finalizeLine(parent, line, width, height) {\n\t        line.width = width;\n\t        line.height = height;\n\t        parent.width = Math.max(parent.width, line.width);\n\t        parent.height += line.height;\n\t    }\n\n\t    if (tpdata.lineCount > 1) {\n\t        var offsetX = 0;\n\t        var offsetY = 0;\n\t        var lineIndex = 0;\n\t        var lineKey;\n\t        line = new Shape.Group('line' + lineIndex);\n\n\t        //Double margin so that left/right-aligned next is not flush with edge of image\n\t        if (scene.align === 'left' || scene.align === 'right') {\n\t            maxLineWidth = scene.width * (1 - (1 - lineWrap) * 2);\n\t        }\n\n\t        for (var i = 0; i < tpdata.words.length; i++) {\n\t            var word = tpdata.words[i];\n\t            textNode = new Shape.Text(word.text);\n\t            var newline = word.text == '\\\\n';\n\t            if (!scene.noWrap && (offsetX + word.width >= maxLineWidth || newline === true)) {\n\t                finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);\n\t                holderTextGroup.add(line);\n\t                offsetX = 0;\n\t                offsetY += holderTextGroup.properties.leading;\n\t                lineIndex += 1;\n\t                line = new Shape.Group('line' + lineIndex);\n\t                line.y = offsetY;\n\t            }\n\t            if (newline === true) {\n\t                continue;\n\t            }\n\t            textNode.moveTo(offsetX, 0);\n\t            offsetX += tpdata.spaceWidth + word.width;\n\t            line.add(textNode);\n\t        }\n\n\t        finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);\n\t        holderTextGroup.add(line);\n\n\t        if (scene.align === 'left') {\n\t            holderTextGroup.moveTo(scene.width - sceneMargin, null, null);\n\t        } else if (scene.align === 'right') {\n\t            for (lineKey in holderTextGroup.children) {\n\t                line = holderTextGroup.children[lineKey];\n\t                line.moveTo(scene.width - line.width, null, null);\n\t            }\n\n\t            holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);\n\t        } else {\n\t            for (lineKey in holderTextGroup.children) {\n\t                line = holderTextGroup.children[lineKey];\n\t                line.moveTo((holderTextGroup.width - line.width) / 2, null, null);\n\t            }\n\n\t            holderTextGroup.moveTo((scene.width - holderTextGroup.width) / 2, null, null);\n\t        }\n\n\t        holderTextGroup.moveTo(null, (scene.height - holderTextGroup.height) / 2, null);\n\n\t        //If the text exceeds vertical space, move it down so the first line is visible\n\t        if ((scene.height - holderTextGroup.height) / 2 < 0) {\n\t            holderTextGroup.moveTo(null, 0, null);\n\t        }\n\t    } else {\n\t        textNode = new Shape.Text(scene.text);\n\t        line = new Shape.Group('line0');\n\t        line.add(textNode);\n\t        holderTextGroup.add(line);\n\n\t        if (scene.align === 'left') {\n\t            holderTextGroup.moveTo(scene.width - sceneMargin, null, null);\n\t        } else if (scene.align === 'right') {\n\t            holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);\n\t        } else {\n\t            holderTextGroup.moveTo((scene.width - tpdata.boundingBox.width) / 2, null, null);\n\t        }\n\n\t        holderTextGroup.moveTo(null, (scene.height - tpdata.boundingBox.height) / 2, null);\n\t    }\n\n\t    //todo: renderlist\n\t    return sceneGraph;\n\t}\n\n\t/**\n\t * Adaptive text sizing function\n\t *\n\t * @private\n\t * @param width Parent width\n\t * @param height Parent height\n\t * @param fontSize Requested text size\n\t * @param scale Proportional scale of text\n\t */\n\tfunction textSize(width, height, fontSize, scale) {\n\t    var stageWidth = parseInt(width, 10);\n\t    var stageHeight = parseInt(height, 10);\n\n\t    var bigSide = Math.max(stageWidth, stageHeight);\n\t    var smallSide = Math.min(stageWidth, stageHeight);\n\n\t    var newHeight = 0.8 * Math.min(smallSide, bigSide * scale);\n\t    return Math.round(Math.max(fontSize, newHeight));\n\t}\n\n\t/**\n\t * Iterates over resizable (fluid or auto) placeholders and renders them\n\t *\n\t * @private\n\t * @param element Optional element selector, specified only if a specific element needs to be re-rendered\n\t */\n\tfunction updateResizableElements(element) {\n\t    var images;\n\t    if (element == null || element.nodeType == null) {\n\t        images = App.vars.resizableImages;\n\t    } else {\n\t        images = [element];\n\t    }\n\t    for (var i = 0, l = images.length; i < l; i++) {\n\t        var el = images[i];\n\t        if (el.holderData) {\n\t            var flags = el.holderData.flags;\n\t            var dimensions = dimensionCheck(el);\n\t            if (dimensions) {\n\t                if (!el.holderData.resizeUpdate) {\n\t                    continue;\n\t                }\n\n\t                if (flags.fluid && flags.auto) {\n\t                    var fluidConfig = el.holderData.fluidConfig;\n\t                    switch (fluidConfig.mode) {\n\t                        case 'width':\n\t                            dimensions.height = dimensions.width / fluidConfig.ratio;\n\t                            break;\n\t                        case 'height':\n\t                            dimensions.width = dimensions.height * fluidConfig.ratio;\n\t                            break;\n\t                    }\n\t                }\n\n\t                var settings = {\n\t                    mode: 'image',\n\t                    holderSettings: {\n\t                        dimensions: dimensions,\n\t                        theme: flags.theme,\n\t                        flags: flags\n\t                    },\n\t                    el: el,\n\t                    engineSettings: el.holderData.engineSettings\n\t                };\n\n\t                if (flags.textmode == 'exact') {\n\t                    flags.exactDimensions = dimensions;\n\t                    settings.holderSettings.dimensions = flags.dimensions;\n\t                }\n\n\t                render(settings);\n\t            } else {\n\t                setInvisible(el);\n\t            }\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Sets up aspect ratio metadata for fluid placeholders, in order to preserve proportions when resizing\n\t *\n\t * @private\n\t * @param el Image DOM element\n\t */\n\tfunction setInitialDimensions(el) {\n\t    if (el.holderData) {\n\t        var dimensions = dimensionCheck(el);\n\t        if (dimensions) {\n\t            var flags = el.holderData.flags;\n\n\t            var fluidConfig = {\n\t                fluidHeight: flags.dimensions.height.slice(-1) == '%',\n\t                fluidWidth: flags.dimensions.width.slice(-1) == '%',\n\t                mode: null,\n\t                initialDimensions: dimensions\n\t            };\n\n\t            if (fluidConfig.fluidWidth && !fluidConfig.fluidHeight) {\n\t                fluidConfig.mode = 'width';\n\t                fluidConfig.ratio = fluidConfig.initialDimensions.width / parseFloat(flags.dimensions.height);\n\t            } else if (!fluidConfig.fluidWidth && fluidConfig.fluidHeight) {\n\t                fluidConfig.mode = 'height';\n\t                fluidConfig.ratio = parseFloat(flags.dimensions.width) / fluidConfig.initialDimensions.height;\n\t            }\n\n\t            el.holderData.fluidConfig = fluidConfig;\n\t        } else {\n\t            setInvisible(el);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * Iterates through all current invisible images, and if they're visible, renders them and removes them from further checks. Runs every animation frame.\n\t *\n\t * @private\n\t */\n\tfunction visibilityCheck() {\n\t    var renderableImages = [];\n\t    var keys = Object.keys(App.vars.invisibleImages);\n\t    var el;\n\n\t    keys.forEach(function (key) {\n\t        el = App.vars.invisibleImages[key];\n\t        if (dimensionCheck(el) && el.nodeName.toLowerCase() == 'img') {\n\t            renderableImages.push(el);\n\t            delete App.vars.invisibleImages[key];\n\t        }\n\t    });\n\n\t    if (renderableImages.length) {\n\t        Holder.run({\n\t            images: renderableImages\n\t        });\n\t    }\n\n\t    // Done to prevent 100% CPU usage via aggressive calling of requestAnimationFrame\n\t    setTimeout(function () {\n\t        global.requestAnimationFrame(visibilityCheck);\n\t    }, 10);\n\t}\n\n\t/**\n\t * Starts checking for invisible placeholders if not doing so yet. Does nothing otherwise.\n\t *\n\t * @private\n\t */\n\tfunction startVisibilityCheck() {\n\t    if (!App.vars.visibilityCheckStarted) {\n\t        global.requestAnimationFrame(visibilityCheck);\n\t        App.vars.visibilityCheckStarted = true;\n\t    }\n\t}\n\n\t/**\n\t * Sets a unique ID for an image detected to be invisible and adds it to the map of invisible images checked by visibilityCheck\n\t *\n\t * @private\n\t * @param el Invisible DOM element\n\t */\n\tfunction setInvisible(el) {\n\t    if (!el.holderData.invisibleId) {\n\t        App.vars.invisibleId += 1;\n\t        App.vars.invisibleImages['i' + App.vars.invisibleId] = el;\n\t        el.holderData.invisibleId = App.vars.invisibleId;\n\t    }\n\t}\n\n\t//todo: see if possible to convert stagingRenderer to use HTML only\n\tvar stagingRenderer = (function() {\n\t    var svg = null,\n\t        stagingText = null,\n\t        stagingTextNode = null;\n\t    return function(graph) {\n\t        var rootNode = graph.root;\n\t        if (App.setup.supportsSVG) {\n\t            var firstTimeSetup = false;\n\t            var tnode = function(text) {\n\t                return document.createTextNode(text);\n\t            };\n\t            if (svg == null || svg.parentNode !== document.body) {\n\t                firstTimeSetup = true;\n\t            }\n\n\t            svg = SVG.initSVG(svg, rootNode.properties.width, rootNode.properties.height);\n\t            //Show staging element before staging\n\t            svg.style.display = 'block';\n\n\t            if (firstTimeSetup) {\n\t                stagingText = DOM.newEl('text', SVG_NS);\n\t                stagingTextNode = tnode(null);\n\t                DOM.setAttr(stagingText, {\n\t                    x: 0\n\t                });\n\t                stagingText.appendChild(stagingTextNode);\n\t                svg.appendChild(stagingText);\n\t                document.body.appendChild(svg);\n\t                svg.style.visibility = 'hidden';\n\t                svg.style.position = 'absolute';\n\t                svg.style.top = '-100%';\n\t                svg.style.left = '-100%';\n\t                //todo: workaround for zero-dimension <svg> tag in Opera 12\n\t                //svg.setAttribute('width', 0);\n\t                //svg.setAttribute('height', 0);\n\t            }\n\n\t            var holderTextGroup = rootNode.children.holderTextGroup;\n\t            var htgProps = holderTextGroup.properties;\n\t            DOM.setAttr(stagingText, {\n\t                'y': htgProps.font.size,\n\t                'style': utils.cssProps({\n\t                    'font-weight': htgProps.font.weight,\n\t                    'font-size': htgProps.font.size + htgProps.font.units,\n\t                    'font-family': htgProps.font.family\n\t                })\n\t            });\n\n\t            //Get bounding box for the whole string (total width and height)\n\t            stagingTextNode.nodeValue = htgProps.text;\n\t            var stagingTextBBox = stagingText.getBBox();\n\n\t            //Get line count and split the string into words\n\t            var lineCount = Math.ceil(stagingTextBBox.width / rootNode.properties.width);\n\t            var words = htgProps.text.split(' ');\n\t            var newlines = htgProps.text.match(/\\\\n/g);\n\t            lineCount += newlines == null ? 0 : newlines.length;\n\n\t            //Get bounding box for the string with spaces removed\n\t            stagingTextNode.nodeValue = htgProps.text.replace(/[ ]+/g, '');\n\t            var computedNoSpaceLength = stagingText.getComputedTextLength();\n\n\t            //Compute average space width\n\t            var diffLength = stagingTextBBox.width - computedNoSpaceLength;\n\t            var spaceWidth = Math.round(diffLength / Math.max(1, words.length - 1));\n\n\t            //Get widths for every word with space only if there is more than one line\n\t            var wordWidths = [];\n\t            if (lineCount > 1) {\n\t                stagingTextNode.nodeValue = '';\n\t                for (var i = 0; i < words.length; i++) {\n\t                    if (words[i].length === 0) continue;\n\t                    stagingTextNode.nodeValue = utils.decodeHtmlEntity(words[i]);\n\t                    var bbox = stagingText.getBBox();\n\t                    wordWidths.push({\n\t                        text: words[i],\n\t                        width: bbox.width\n\t                    });\n\t                }\n\t            }\n\n\t            //Hide staging element after staging\n\t            svg.style.display = 'none';\n\n\t            return {\n\t                spaceWidth: spaceWidth,\n\t                lineCount: lineCount,\n\t                boundingBox: stagingTextBBox,\n\t                words: wordWidths\n\t            };\n\t        } else {\n\t            //todo: canvas fallback for measuring text on android 2.3\n\t            return false;\n\t        }\n\t    };\n\t})();\n\n\t//Helpers\n\n\t/**\n\t * Prevents a function from being called too often, waits until a timer elapses to call it again\n\t *\n\t * @param fn Function to call\n\t */\n\tfunction debounce(fn) {\n\t    if (!App.vars.debounceTimer) fn.call(this);\n\t    if (App.vars.debounceTimer) global.clearTimeout(App.vars.debounceTimer);\n\t    App.vars.debounceTimer = global.setTimeout(function() {\n\t        App.vars.debounceTimer = null;\n\t        fn.call(this);\n\t    }, App.setup.debounce);\n\t}\n\n\t/**\n\t * Holder-specific resize/orientation change callback, debounced to prevent excessive execution\n\t */\n\tfunction resizeEvent() {\n\t    debounce(function() {\n\t        updateResizableElements(null);\n\t    });\n\t}\n\n\t//Set up flags\n\n\tfor (var flag in App.flags) {\n\t    if (!App.flags.hasOwnProperty(flag)) continue;\n\t    App.flags[flag].match = function(val) {\n\t        return val.match(this.regex);\n\t    };\n\t}\n\n\t//Properties set once on setup\n\n\tApp.setup = {\n\t    renderer: 'html',\n\t    debounce: 100,\n\t    ratio: 1,\n\t    supportsCanvas: false,\n\t    supportsSVG: false,\n\t    lineWrapRatio: 0.9,\n\t    dataAttr: 'data-src',\n\t    renderers: ['html', 'canvas', 'svg']\n\t};\n\n\t//Properties modified during runtime\n\n\tApp.vars = {\n\t    preempted: false,\n\t    resizableImages: [],\n\t    invisibleImages: {},\n\t    invisibleId: 0,\n\t    visibilityCheckStarted: false,\n\t    debounceTimer: null,\n\t    cache: {}\n\t};\n\n\t//Pre-flight\n\n\t(function() {\n\t    var canvas = DOM.newEl('canvas');\n\n\t    if (canvas.getContext) {\n\t        if (canvas.toDataURL('image/png').indexOf('data:image/png') != -1) {\n\t            App.setup.renderer = 'canvas';\n\t            App.setup.supportsCanvas = true;\n\t        }\n\t    }\n\n\t    if (!!document.createElementNS && !!document.createElementNS(SVG_NS, 'svg').createSVGRect) {\n\t        App.setup.renderer = 'svg';\n\t        App.setup.supportsSVG = true;\n\t    }\n\t})();\n\n\t//Starts checking for invisible placeholders\n\tstartVisibilityCheck();\n\n\tif (onDomReady) {\n\t    onDomReady(function() {\n\t        if (!App.vars.preempted) {\n\t            Holder.run();\n\t        }\n\t        if (global.addEventListener) {\n\t            global.addEventListener('resize', resizeEvent, false);\n\t            global.addEventListener('orientationchange', resizeEvent, false);\n\t        } else {\n\t            global.attachEvent('onresize', resizeEvent);\n\t        }\n\n\t        if (typeof global.Turbolinks == 'object') {\n\t            global.document.addEventListener('page:change', function() {\n\t                Holder.run();\n\t            });\n\t        }\n\t    });\n\t}\n\n\tmodule.exports = Holder;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * onDomReady.js 1.4.0 (c) 2013 Tubal Martin - MIT license\n\t *\n\t * Specially modified to work with Holder.js\n\t */\n\n\tfunction _onDomReady(win) {\n\t    //Lazy loading fix for Firefox < 3.6\n\t    //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n\t    if (document.readyState == null && document.addEventListener) {\n\t        document.addEventListener(\"DOMContentLoaded\", function DOMContentLoaded() {\n\t            document.removeEventListener(\"DOMContentLoaded\", DOMContentLoaded, false);\n\t            document.readyState = \"complete\";\n\t        }, false);\n\t        document.readyState = \"loading\";\n\t    }\n\t    \n\t    var doc = win.document,\n\t        docElem = doc.documentElement,\n\t    \n\t        LOAD = \"load\",\n\t        FALSE = false,\n\t        ONLOAD = \"on\"+LOAD,\n\t        COMPLETE = \"complete\",\n\t        READYSTATE = \"readyState\",\n\t        ATTACHEVENT = \"attachEvent\",\n\t        DETACHEVENT = \"detachEvent\",\n\t        ADDEVENTLISTENER = \"addEventListener\",\n\t        DOMCONTENTLOADED = \"DOMContentLoaded\",\n\t        ONREADYSTATECHANGE = \"onreadystatechange\",\n\t        REMOVEEVENTLISTENER = \"removeEventListener\",\n\t    \n\t        // W3C Event model\n\t        w3c = ADDEVENTLISTENER in doc,\n\t        _top = FALSE,\n\t    \n\t        // isReady: Is the DOM ready to be used? Set to true once it occurs.\n\t        isReady = FALSE,\n\t    \n\t        // Callbacks pending execution until DOM is ready\n\t        callbacks = [];\n\t    \n\t    // Handle when the DOM is ready\n\t    function ready( fn ) {\n\t        if ( !isReady ) {\n\t    \n\t            // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t            if ( !doc.body ) {\n\t                return defer( ready );\n\t            }\n\t    \n\t            // Remember that the DOM is ready\n\t            isReady = true;\n\t    \n\t            // Execute all callbacks\n\t            while ( fn = callbacks.shift() ) {\n\t                defer( fn );\n\t            }\n\t        }\n\t    }\n\t    \n\t    // The ready event handler\n\t    function completed( event ) {\n\t        // readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t        if ( w3c || event.type === LOAD || doc[READYSTATE] === COMPLETE ) {\n\t            detach();\n\t            ready();\n\t        }\n\t    }\n\t    \n\t    // Clean-up method for dom ready events\n\t    function detach() {\n\t        if ( w3c ) {\n\t            doc[REMOVEEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\t            win[REMOVEEVENTLISTENER]( LOAD, completed, FALSE );\n\t        } else {\n\t            doc[DETACHEVENT]( ONREADYSTATECHANGE, completed );\n\t            win[DETACHEVENT]( ONLOAD, completed );\n\t        }\n\t    }\n\t    \n\t    // Defers a function, scheduling it to run after the current call stack has cleared.\n\t    function defer( fn, wait ) {\n\t        // Allow 0 to be passed\n\t        setTimeout( fn, +wait >= 0 ? wait : 1 );\n\t    }\n\t    \n\t    // Attach the listeners:\n\t    \n\t    // Catch cases where onDomReady is called after the browser event has already occurred.\n\t    // we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t    // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t    if ( doc[READYSTATE] === COMPLETE ) {\n\t        // Handle it asynchronously to allow scripts the opportunity to delay ready\n\t        defer( ready );\n\t    \n\t    // Standards-based browsers support DOMContentLoaded\n\t    } else if ( w3c ) {\n\t        // Use the handy event callback\n\t        doc[ADDEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\t    \n\t        // A fallback to window.onload, that will always work\n\t        win[ADDEVENTLISTENER]( LOAD, completed, FALSE );\n\t    \n\t    // If IE event model is used\n\t    } else {\n\t        // Ensure firing before onload, maybe late but safe also for iframes\n\t        doc[ATTACHEVENT]( ONREADYSTATECHANGE, completed );\n\t    \n\t        // A fallback to window.onload, that will always work\n\t        win[ATTACHEVENT]( ONLOAD, completed );\n\t    \n\t        // If IE and not a frame\n\t        // continually check to see if the document is ready\n\t        try {\n\t            _top = win.frameElement == null && docElem;\n\t        } catch(e) {}\n\t    \n\t        if ( _top && _top.doScroll ) {\n\t            (function doScrollCheck() {\n\t                if ( !isReady ) {\n\t                    try {\n\t                        // Use the trick by Diego Perini\n\t                        // http://javascript.nwbox.com/IEContentLoaded/\n\t                        _top.doScroll(\"left\");\n\t                    } catch(e) {\n\t                        return defer( doScrollCheck, 50 );\n\t                    }\n\t    \n\t                    // detach all dom ready events\n\t                    detach();\n\t    \n\t                    // and execute any waiting functions\n\t                    ready();\n\t                }\n\t            })();\n\t        }\n\t    }\n\t    \n\t    function onDomReady( fn ) {\n\t        // If DOM is ready, execute the function (async), otherwise wait\n\t        isReady ? defer( fn ) : callbacks.push( fn );\n\t    }\n\t    \n\t    // Add version\n\t    onDomReady.version = \"1.4.0\";\n\t    // Add method to check if DOM is ready\n\t    onDomReady.isReady = function(){\n\t        return isReady;\n\t    };\n\n\t    return onDomReady;\n\t}\n\n\tmodule.exports = typeof window !== \"undefined\" && _onDomReady(window);\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//Modified version of component/querystring\n\t//Changes: updated dependencies, dot notation parsing, JSHint fixes\n\t//Fork at https://github.com/imsky/querystring\n\n\t/**\n\t * Module dependencies.\n\t */\n\n\tvar encode = encodeURIComponent;\n\tvar decode = decodeURIComponent;\n\tvar trim = __webpack_require__(4);\n\tvar type = __webpack_require__(5);\n\n\tvar arrayRegex = /(\\w+)\\[(\\d+)\\]/;\n\tvar objectRegex = /\\w+\\.\\w+/;\n\n\t/**\n\t * Parse the given query `str`.\n\t *\n\t * @param {String} str\n\t * @return {Object}\n\t * @api public\n\t */\n\n\texports.parse = function(str){\n\t  if ('string' !== typeof str) return {};\n\n\t  str = trim(str);\n\t  if ('' === str) return {};\n\t  if ('?' === str.charAt(0)) str = str.slice(1);\n\n\t  var obj = {};\n\t  var pairs = str.split('&');\n\t  for (var i = 0; i < pairs.length; i++) {\n\t    var parts = pairs[i].split('=');\n\t    var key = decode(parts[0]);\n\t    var m, ctx, prop;\n\n\t    if (m = arrayRegex.exec(key)) {\n\t      obj[m[1]] = obj[m[1]] || [];\n\t      obj[m[1]][m[2]] = decode(parts[1]);\n\t      continue;\n\t    }\n\n\t    if (m = objectRegex.test(key)) {\n\t      m = key.split('.');\n\t      ctx = obj;\n\t      \n\t      while (m.length) {\n\t        prop = m.shift();\n\n\t        if (!prop.length) continue;\n\n\t        if (!ctx[prop]) {\n\t          ctx[prop] = {};\n\t        } else if (ctx[prop] && typeof ctx[prop] !== 'object') {\n\t          break;\n\t        }\n\n\t        if (!m.length) {\n\t          ctx[prop] = decode(parts[1]);\n\t        }\n\n\t        ctx = ctx[prop];\n\t      }\n\n\t      continue;\n\t    }\n\n\t    obj[parts[0]] = null == parts[1] ? '' : decode(parts[1]);\n\t  }\n\n\t  return obj;\n\t};\n\n\t/**\n\t * Stringify the given `obj`.\n\t *\n\t * @param {Object} obj\n\t * @return {String}\n\t * @api public\n\t */\n\n\texports.stringify = function(obj){\n\t  if (!obj) return '';\n\t  var pairs = [];\n\n\t  for (var key in obj) {\n\t    var value = obj[key];\n\n\t    if ('array' == type(value)) {\n\t      for (var i = 0; i < value.length; ++i) {\n\t        pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));\n\t      }\n\t      continue;\n\t    }\n\n\t    pairs.push(encode(key) + '=' + encode(obj[key]));\n\t  }\n\n\t  return pairs.join('&');\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\n\texports = module.exports = trim;\n\n\tfunction trim(str){\n\t  return str.replace(/^\\s*|\\s*$/g, '');\n\t}\n\n\texports.left = function(str){\n\t  return str.replace(/^\\s*/, '');\n\t};\n\n\texports.right = function(str){\n\t  return str.replace(/\\s*$/, '');\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t/**\n\t * toString ref.\n\t */\n\n\tvar toString = Object.prototype.toString;\n\n\t/**\n\t * Return the type of `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {String}\n\t * @api public\n\t */\n\n\tmodule.exports = function(val){\n\t  switch (toString.call(val)) {\n\t    case '[object Date]': return 'date';\n\t    case '[object RegExp]': return 'regexp';\n\t    case '[object Arguments]': return 'arguments';\n\t    case '[object Array]': return 'array';\n\t    case '[object Error]': return 'error';\n\t  }\n\n\t  if (val === null) return 'null';\n\t  if (val === undefined) return 'undefined';\n\t  if (val !== val) return 'nan';\n\t  if (val && val.nodeType === 1) return 'element';\n\n\t  val = val.valueOf\n\t    ? val.valueOf()\n\t    : Object.prototype.valueOf.apply(val)\n\n\t  return typeof val;\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\tvar SceneGraph = function(sceneProperties) {\n\t    var nodeCount = 1;\n\n\t    //todo: move merge to helpers section\n\t    function merge(parent, child) {\n\t        for (var prop in child) {\n\t            parent[prop] = child[prop];\n\t        }\n\t        return parent;\n\t    }\n\n\t    var SceneNode = function(name) {\n\t        nodeCount++;\n\t        this.parent = null;\n\t        this.children = {};\n\t        this.id = nodeCount;\n\t        this.name = 'n' + nodeCount;\n\t        if (typeof name !== 'undefined') {\n\t            this.name = name;\n\t        }\n\t        this.x = this.y = this.z = 0;\n\t        this.width = this.height = 0;\n\t    };\n\n\t    SceneNode.prototype.resize = function(width, height) {\n\t        if (width != null) {\n\t            this.width = width;\n\t        }\n\t        if (height != null) {\n\t            this.height = height;\n\t        }\n\t    };\n\n\t    SceneNode.prototype.moveTo = function(x, y, z) {\n\t        this.x = x != null ? x : this.x;\n\t        this.y = y != null ? y : this.y;\n\t        this.z = z != null ? z : this.z;\n\t    };\n\n\t    SceneNode.prototype.add = function(child) {\n\t        var name = child.name;\n\t        if (typeof this.children[name] === 'undefined') {\n\t            this.children[name] = child;\n\t            child.parent = this;\n\t        } else {\n\t            throw 'SceneGraph: child already exists: ' + name;\n\t        }\n\t    };\n\n\t    var RootNode = function() {\n\t        SceneNode.call(this, 'root');\n\t        this.properties = sceneProperties;\n\t    };\n\n\t    RootNode.prototype = new SceneNode();\n\n\t    var Shape = function(name, props) {\n\t        SceneNode.call(this, name);\n\t        this.properties = {\n\t            'fill': '#000000'\n\t        };\n\t        if (typeof props !== 'undefined') {\n\t            merge(this.properties, props);\n\t        } else if (typeof name !== 'undefined' && typeof name !== 'string') {\n\t            throw 'SceneGraph: invalid node name';\n\t        }\n\t    };\n\n\t    Shape.prototype = new SceneNode();\n\n\t    var Group = function() {\n\t        Shape.apply(this, arguments);\n\t        this.type = 'group';\n\t    };\n\n\t    Group.prototype = new Shape();\n\n\t    var Rect = function() {\n\t        Shape.apply(this, arguments);\n\t        this.type = 'rect';\n\t    };\n\n\t    Rect.prototype = new Shape();\n\n\t    var Text = function(text) {\n\t        Shape.call(this);\n\t        this.type = 'text';\n\t        this.properties.text = text;\n\t    };\n\n\t    Text.prototype = new Shape();\n\n\t    var root = new RootNode();\n\n\t    this.Shape = {\n\t        'Rect': Rect,\n\t        'Text': Text,\n\t        'Group': Group\n\t    };\n\n\t    this.root = root;\n\t    return this;\n\t};\n\n\tmodule.exports = SceneGraph;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Shallow object clone and merge\n\t *\n\t * @param a Object A\n\t * @param b Object B\n\t * @returns {Object} New object with all of A's properties, and all of B's properties, overwriting A's properties\n\t */\n\texports.extend = function(a, b) {\n\t    var c = {};\n\t    for (var x in a) {\n\t        if (a.hasOwnProperty(x)) {\n\t            c[x] = a[x];\n\t        }\n\t    }\n\t    if (b != null) {\n\t        for (var y in b) {\n\t            if (b.hasOwnProperty(y)) {\n\t                c[y] = b[y];\n\t            }\n\t        }\n\t    }\n\t    return c;\n\t};\n\n\t/**\n\t * Takes a k/v list of CSS properties and returns a rule\n\t *\n\t * @param props CSS properties object\n\t */\n\texports.cssProps = function(props) {\n\t    var ret = [];\n\t    for (var p in props) {\n\t        if (props.hasOwnProperty(p)) {\n\t            ret.push(p + ':' + props[p]);\n\t        }\n\t    }\n\t    return ret.join(';');\n\t};\n\n\t/**\n\t * Encodes HTML entities in a string\n\t *\n\t * @param str Input string\n\t */\n\texports.encodeHtmlEntity = function(str) {\n\t    var buf = [];\n\t    var charCode = 0;\n\t    for (var i = str.length - 1; i >= 0; i--) {\n\t        charCode = str.charCodeAt(i);\n\t        if (charCode > 128) {\n\t            buf.unshift(['&#', charCode, ';'].join(''));\n\t        } else {\n\t            buf.unshift(str[i]);\n\t        }\n\t    }\n\t    return buf.join('');\n\t};\n\n\t/**\n\t * Checks if an image exists\n\t *\n\t * @param src URL of image\n\t * @param callback Callback to call once image status has been found\n\t */\n\texports.imageExists = function(src, callback) {\n\t    var image = new Image();\n\t    image.onerror = function() {\n\t        callback.call(this, false);\n\t    };\n\t    image.onload = function() {\n\t        callback.call(this, true);\n\t    };\n\t    image.src = src;\n\t};\n\n\t/**\n\t * Decodes HTML entities in a string\n\t *\n\t * @param str Input string\n\t */\n\texports.decodeHtmlEntity = function(str) {\n\t    return str.replace(/&#(\\d+);/g, function(match, dec) {\n\t        return String.fromCharCode(dec);\n\t    });\n\t};\n\n\n\t/**\n\t * Returns an element's dimensions if it's visible, `false` otherwise.\n\t *\n\t * @param el DOM element\n\t */\n\texports.dimensionCheck = function(el) {\n\t    var dimensions = {\n\t        height: el.clientHeight,\n\t        width: el.clientWidth\n\t    };\n\n\t    if (dimensions.height && dimensions.width) {\n\t        return dimensions;\n\t    } else {\n\t        return false;\n\t    }\n\t};\n\n\n\t/**\n\t * Returns true if value is truthy or if it is \"semantically truthy\"\n\t * @param val\n\t */\n\texports.truthy = function(val) {\n\t    if (typeof val === 'string') {\n\t        return val === 'true' || val === 'yes' || val === '1' || val === 'on' || val === '✓';\n\t    }\n\t    return !!val;\n\t};\n\n\t/**\n\t * Parses input into a well-formed CSS color\n\t * @param val\n\t */\n\texports.parseColor = function(val) {\n\t    var hexre = /(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i;\n\t    var rgbre = /^rgb\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;\n\t    var rgbare = /^rgba\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(0\\.\\d{1,}|1)\\)$/;\n\n\t    var match = val.match(hexre);\n\t    var retval;\n\n\t    if (match !== null) {\n\t        retval = match[1] || match[2];\n\t        if (retval[0] !== '#') {\n\t            return '#' + retval;\n\t        } else {\n\t            return retval;\n\t        }\n\t    }\n\n\t    match = val.match(rgbre);\n\n\t    if (match !== null) {\n\t        retval = 'rgb(' + match.slice(1).join(',') + ')';\n\t        return retval;\n\t    }\n\n\t    match = val.match(rgbare);\n\n\t    if (match !== null) {\n\t        retval = 'rgba(' + match.slice(1).join(',') + ')';\n\t        return retval;\n\t    }\n\n\t    return null;\n\t};\n\n\t/**\n\t * Provides the correct scaling ratio for canvas drawing operations on HiDPI screens (e.g. Retina displays)\n\t */\n\texports.canvasRatio = function () {\n\t    var devicePixelRatio = 1;\n\t    var backingStoreRatio = 1;\n\n\t    if (global.document) {\n\t        var canvas = global.document.createElement('canvas');\n\t        if (canvas.getContext) {\n\t            var ctx = canvas.getContext('2d');\n\t            devicePixelRatio = global.devicePixelRatio || 1;\n\t            backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\n\t        }\n\t    }\n\n\t    return devicePixelRatio / backingStoreRatio;\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {var DOM = __webpack_require__(9);\n\n\tvar SVG_NS = 'http://www.w3.org/2000/svg';\n\tvar NODE_TYPE_COMMENT = 8;\n\n\t/**\n\t * Generic SVG element creation function\n\t *\n\t * @param svg SVG context, set to null if new\n\t * @param width Document width\n\t * @param height Document height\n\t */\n\texports.initSVG = function(svg, width, height) {\n\t    var defs, style, initialize = false;\n\n\t    if (svg && svg.querySelector) {\n\t        style = svg.querySelector('style');\n\t        if (style === null) {\n\t            initialize = true;\n\t        }\n\t    } else {\n\t        svg = DOM.newEl('svg', SVG_NS);\n\t        initialize = true;\n\t    }\n\n\t    if (initialize) {\n\t        defs = DOM.newEl('defs', SVG_NS);\n\t        style = DOM.newEl('style', SVG_NS);\n\t        DOM.setAttr(style, {\n\t            'type': 'text/css'\n\t        });\n\t        defs.appendChild(style);\n\t        svg.appendChild(defs);\n\t    }\n\n\t    //IE throws an exception if this is set and Chrome requires it to be set\n\t    if (svg.webkitMatchesSelector) {\n\t        svg.setAttribute('xmlns', SVG_NS);\n\t    }\n\n\t    //Remove comment nodes\n\t    for (var i = 0; i < svg.childNodes.length; i++) {\n\t        if (svg.childNodes[i].nodeType === NODE_TYPE_COMMENT) {\n\t            svg.removeChild(svg.childNodes[i]);\n\t        }\n\t    }\n\n\t    //Remove CSS\n\t    while (style.childNodes.length) {\n\t        style.removeChild(style.childNodes[0]);\n\t    }\n\n\t    DOM.setAttr(svg, {\n\t        'width': width,\n\t        'height': height,\n\t        'viewBox': '0 0 ' + width + ' ' + height,\n\t        'preserveAspectRatio': 'none'\n\t    });\n\n\t    return svg;\n\t};\n\n\t/**\n\t * Converts serialized SVG to a string suitable for data URI use\n\t * @param svgString Serialized SVG string\n\t * @param [base64] Use base64 encoding for data URI\n\t */\n\texports.svgStringToDataURI = function() {\n\t    var rawPrefix = 'data:image/svg+xml;charset=UTF-8,';\n\t    var base64Prefix = 'data:image/svg+xml;charset=UTF-8;base64,';\n\n\t    return function(svgString, base64) {\n\t        if (base64) {\n\t            return base64Prefix + btoa(global.unescape(encodeURIComponent(svgString)));\n\t        } else {\n\t            return rawPrefix + encodeURIComponent(svgString);\n\t        }\n\t    };\n\t}();\n\n\t/**\n\t * Returns serialized SVG with XML processing instructions\n\t *\n\t * @param svg SVG context\n\t * @param stylesheets CSS stylesheets to include\n\t */\n\texports.serializeSVG = function(svg, engineSettings) {\n\t    if (!global.XMLSerializer) return;\n\t    var serializer = new XMLSerializer();\n\t    var svgCSS = '';\n\t    var stylesheets = engineSettings.stylesheets;\n\n\t    //External stylesheets: Processing Instruction method\n\t    if (engineSettings.svgXMLStylesheet) {\n\t        var xml = DOM.createXML();\n\t        //Add <?xml-stylesheet ?> directives\n\t        for (var i = stylesheets.length - 1; i >= 0; i--) {\n\t            var csspi = xml.createProcessingInstruction('xml-stylesheet', 'href=\"' + stylesheets[i] + '\" rel=\"stylesheet\"');\n\t            xml.insertBefore(csspi, xml.firstChild);\n\t        }\n\n\t        xml.removeChild(xml.documentElement);\n\t        svgCSS = serializer.serializeToString(xml);\n\t    }\n\n\t    var svgText = serializer.serializeToString(svg);\n\t    svgText = svgText.replace(/\\&amp;(\\#[0-9]{2,}\\;)/g, '&$1');\n\t    return svgCSS + svgText;\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Generic new DOM element function\n\t *\n\t * @param tag Tag to create\n\t * @param namespace Optional namespace value\n\t */\n\texports.newEl = function(tag, namespace) {\n\t    if (!global.document) return;\n\n\t    if (namespace == null) {\n\t        return global.document.createElement(tag);\n\t    } else {\n\t        return global.document.createElementNS(namespace, tag);\n\t    }\n\t};\n\n\t/**\n\t * Generic setAttribute function\n\t *\n\t * @param el Reference to DOM element\n\t * @param attrs Object with attribute keys and values\n\t */\n\texports.setAttr = function (el, attrs) {\n\t    for (var a in attrs) {\n\t        el.setAttribute(a, attrs[a]);\n\t    }\n\t};\n\n\t/**\n\t * Creates a XML document\n\t * @private\n\t */\n\texports.createXML = function() {\n\t    if (!global.DOMParser) return;\n\t    return new DOMParser().parseFromString('<xml />', 'application/xml');\n\t};\n\n\t/**\n\t * Converts a value into an array of DOM nodes\n\t *\n\t * @param val A string, a NodeList, a Node, or an HTMLCollection\n\t */\n\texports.getNodeArray = function(val) {\n\t    var retval = null;\n\t    if (typeof(val) == 'string') {\n\t        retval = document.querySelectorAll(val);\n\t    } else if (global.NodeList && val instanceof global.NodeList) {\n\t        retval = val;\n\t    } else if (global.Node && val instanceof global.Node) {\n\t        retval = [val];\n\t    } else if (global.HTMLCollection && val instanceof global.HTMLCollection) {\n\t        retval = val;\n\t    } else if (val instanceof Array) {\n\t        retval = val;\n\t    } else if (val === null) {\n\t        retval = [];\n\t    }\n\n\t    retval = Array.prototype.slice.call(retval);\n\n\t    return retval;\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\tvar Color = function(color, options) {\n\t    //todo: support rgba, hsla, and rrggbbaa notation\n\t    //todo: use CIELAB internally\n\t    //todo: add clamp function (with sign)\n\t    if (typeof color !== 'string') return;\n\n\t    this.original = color;\n\n\t    if (color.charAt(0) === '#') {\n\t        color = color.slice(1);\n\t    }\n\n\t    if (/[^a-f0-9]+/i.test(color)) return;\n\n\t    if (color.length === 3) {\n\t        color = color.replace(/./g, '$&$&');\n\t    }\n\n\t    if (color.length !== 6) return;\n\n\t    this.alpha = 1;\n\n\t    if (options && options.alpha) {\n\t        this.alpha = options.alpha;\n\t    }\n\n\t    this.set(parseInt(color, 16));\n\t};\n\n\t//todo: jsdocs\n\tColor.rgb2hex = function(r, g, b) {\n\t    function format (decimal) {\n\t        var hex = (decimal | 0).toString(16);\n\t        if (decimal < 16) {\n\t            hex = '0' + hex;\n\t        }\n\t        return hex;\n\t    }\n\n\t    return [r, g, b].map(format).join('');\n\t};\n\n\t//todo: jsdocs\n\tColor.hsl2rgb = function (h, s, l) {\n\t    var H = h / 60;\n\t    var C = (1 - Math.abs(2 * l - 1)) * s;\n\t    var X = C * (1 - Math.abs(parseInt(H) % 2 - 1));\n\t    var m = l - (C / 2);\n\n\t    var r = 0, g = 0, b = 0;\n\n\t    if (H >= 0 && H < 1) {\n\t        r = C;\n\t        g = X;\n\t    } else if (H >= 1 && H < 2) {\n\t        r = X;\n\t        g = C;\n\t    } else if (H >= 2 && H < 3) {\n\t        g = C;\n\t        b = X;\n\t    } else if (H >= 3 && H < 4) {\n\t        g = X;\n\t        b = C;\n\t    } else if (H >= 4 && H < 5) {\n\t        r = X;\n\t        b = C;\n\t    } else if (H >= 5 && H < 6) {\n\t        r = C;\n\t        b = X;\n\t    }\n\n\t    r += m;\n\t    g += m;\n\t    b += m;\n\n\t    r = parseInt(r * 255);\n\t    g = parseInt(g * 255);\n\t    b = parseInt(b * 255);\n\n\t    return [r, g, b];\n\t};\n\n\t/**\n\t * Sets the color from a raw RGB888 integer\n\t * @param raw RGB888 representation of color\n\t */\n\t//todo: refactor into a static method\n\t//todo: factor out individual color spaces\n\t//todo: add HSL, CIELAB, and CIELUV\n\tColor.prototype.set = function (val) {\n\t    this.raw = val;\n\n\t    var r = (this.raw & 0xFF0000) >> 16;\n\t    var g = (this.raw & 0x00FF00) >> 8;\n\t    var b = (this.raw & 0x0000FF);\n\n\t    // BT.709\n\t    var y = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n\t    var u = -0.09991 * r - 0.33609 * g + 0.436 * b;\n\t    var v = 0.615 * r - 0.55861 * g - 0.05639 * b;\n\n\t    this.rgb = {\n\t        r: r,\n\t        g: g,\n\t        b: b\n\t    };\n\n\t    this.yuv = {\n\t        y: y,\n\t        u: u,\n\t        v: v\n\t    };\n\n\t    return this;\n\t};\n\n\t/**\n\t * Lighten or darken a color\n\t * @param multiplier Amount to lighten or darken (-1 to 1)\n\t */\n\tColor.prototype.lighten = function(multiplier) {\n\t    var cm = Math.min(1, Math.max(0, Math.abs(multiplier))) * (multiplier < 0 ? -1 : 1);\n\t    var bm = (255 * cm) | 0;\n\t    var cr = Math.min(255, Math.max(0, this.rgb.r + bm));\n\t    var cg = Math.min(255, Math.max(0, this.rgb.g + bm));\n\t    var cb = Math.min(255, Math.max(0, this.rgb.b + bm));\n\t    var hex = Color.rgb2hex(cr, cg, cb);\n\t    return new Color(hex);\n\t};\n\n\t/**\n\t * Output color in hex format\n\t * @param addHash Add a hash character to the beginning of the output\n\t */\n\tColor.prototype.toHex = function(addHash) {\n\t    return (addHash ? '#' : '') + this.raw.toString(16);\n\t};\n\n\t/**\n\t * Returns whether or not current color is lighter than another color\n\t * @param color Color to compare against\n\t */\n\tColor.prototype.lighterThan = function(color) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    return this.yuv.y > color.yuv.y;\n\t};\n\n\t/**\n\t * Returns the result of mixing current color with another color\n\t * @param color Color to mix with\n\t * @param multiplier How much to mix with the other color\n\t */\n\t/*\n\tColor.prototype.mix = function (color, multiplier) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    var r = this.rgb.r;\n\t    var g = this.rgb.g;\n\t    var b = this.rgb.b;\n\t    var a = this.alpha;\n\n\t    var m = typeof multiplier !== 'undefined' ? multiplier : 0.5;\n\n\t    //todo: write a lerp function\n\t    r = r + m * (color.rgb.r - r);\n\t    g = g + m * (color.rgb.g - g);\n\t    b = b + m * (color.rgb.b - b);\n\t    a = a + m * (color.alpha - a);\n\n\t    return new Color(Color.rgbToHex(r, g, b), {\n\t        'alpha': a\n\t    });\n\t};\n\t*/\n\n\t/**\n\t * Returns the result of blending another color on top of current color with alpha\n\t * @param color Color to blend on top of current color, i.e. \"Ca\"\n\t */\n\t//todo: see if .blendAlpha can be merged into .mix\n\tColor.prototype.blendAlpha = function(color) {\n\t    if (!(color instanceof Color)) {\n\t        color = new Color(color);\n\t    }\n\n\t    var Ca = color;\n\t    var Cb = this;\n\n\t    //todo: write alpha blending function\n\t    var r = Ca.alpha * Ca.rgb.r + (1 - Ca.alpha) * Cb.rgb.r;\n\t    var g = Ca.alpha * Ca.rgb.g + (1 - Ca.alpha) * Cb.rgb.g;\n\t    var b = Ca.alpha * Ca.rgb.b + (1 - Ca.alpha) * Cb.rgb.b;\n\n\t    return new Color(Color.rgb2hex(r, g, b));\n\t};\n\n\tmodule.exports = Color;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {\n\t  'version': '2.9.0',\n\t  'svg_ns': 'http://www.w3.org/2000/svg'\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shaven = __webpack_require__(13);\n\n\tvar SVG = __webpack_require__(8);\n\tvar constants = __webpack_require__(11);\n\tvar utils = __webpack_require__(7);\n\n\tvar SVG_NS = constants.svg_ns;\n\n\tvar templates = {\n\t  'element': function (options) {\n\t    var tag = options.tag;\n\t    var content = options.content || '';\n\t    delete options.tag;\n\t    delete options.content;\n\t    return  [tag, content, options];\n\t  }\n\t};\n\n\t//todo: deprecate tag arg, infer tag from shape object\n\tfunction convertShape (shape, tag) {\n\t  return templates.element({\n\t    'tag': tag,\n\t    'width': shape.width,\n\t    'height': shape.height,\n\t    'fill': shape.properties.fill\n\t  });\n\t}\n\n\tfunction textCss (properties) {\n\t  return utils.cssProps({\n\t    'fill': properties.fill,\n\t    'font-weight': properties.font.weight,\n\t    'font-family': properties.font.family + ', monospace',\n\t    'font-size': properties.font.size + properties.font.units\n\t  });\n\t}\n\n\tfunction outlinePath (bgWidth, bgHeight, outlineWidth) {\n\t  var outlineOffsetWidth = outlineWidth / 2;\n\n\t  return [\n\t    'M', outlineOffsetWidth, outlineOffsetWidth,\n\t    'H', bgWidth - outlineOffsetWidth,\n\t    'V', bgHeight - outlineOffsetWidth,\n\t    'H', outlineOffsetWidth,\n\t    'V', 0,\n\t    'M', 0, outlineOffsetWidth,\n\t    'L', bgWidth, bgHeight - outlineOffsetWidth,\n\t    'M', 0, bgHeight - outlineOffsetWidth,\n\t    'L', bgWidth, outlineOffsetWidth\n\t  ].join(' ');\n\t}\n\n\tmodule.exports = function (sceneGraph, renderSettings) {\n\t  var engineSettings = renderSettings.engineSettings;\n\t  var stylesheets = engineSettings.stylesheets;\n\t  var stylesheetXml = stylesheets.map(function (stylesheet) {\n\t    return '<?xml-stylesheet rel=\"stylesheet\" href=\"' + stylesheet + '\"?>';\n\t  }).join('\\n');\n\n\t  var holderId = 'holder_' + Number(new Date()).toString(16);\n\n\t  var root = sceneGraph.root;\n\t  var textGroup = root.children.holderTextGroup;\n\n\t  var css = '#' + holderId + ' text { ' + textCss(textGroup.properties) + ' } ';\n\n\t  // push text down to be equally vertically aligned with canvas renderer\n\t  textGroup.y += textGroup.textPositionData.boundingBox.height * 0.8;\n\n\t  var wordTags = [];\n\n\t  Object.keys(textGroup.children).forEach(function (lineKey) {\n\t    var line = textGroup.children[lineKey];\n\n\t    Object.keys(line.children).forEach(function (wordKey) {\n\t      var word = line.children[wordKey];\n\t      var x = textGroup.x + line.x + word.x;\n\t      var y = textGroup.y + line.y + word.y;\n\n\t      var wordTag = templates.element({\n\t        'tag': 'text',\n\t        'content': word.properties.text,\n\t        'x': x,\n\t        'y': y\n\t      });\n\n\t      wordTags.push(wordTag);\n\t    });\n\t  });\n\n\t  var text = templates.element({\n\t    'tag': 'g',\n\t    'content': wordTags\n\t  });\n\n\t  var outline = null;\n\n\t  if (root.children.holderBg.properties.outline) {\n\t    var outlineProperties = root.children.holderBg.properties.outline;\n\t    outline = templates.element({\n\t      'tag': 'path',\n\t      'd': outlinePath(root.children.holderBg.width, root.children.holderBg.height, outlineProperties.width),\n\t      'stroke-width': outlineProperties.width,\n\t      'stroke': outlineProperties.fill,\n\t      'fill': 'none'\n\t    });\n\t  }\n\n\t  var bg = convertShape(root.children.holderBg, 'rect');\n\n\t  var sceneContent = [];\n\n\t  sceneContent.push(bg);\n\t  if (outlineProperties) {\n\t    sceneContent.push(outline);\n\t  }\n\t  sceneContent.push(text);\n\n\t  var scene = templates.element({\n\t    'tag': 'g',\n\t    'id': holderId,\n\t    'content': sceneContent\n\t  });\n\n\t  var style = templates.element({\n\t    'tag': 'style',\n\t    //todo: figure out how to add CDATA directive\n\t    'content': css,\n\t    'type': 'text/css'\n\t  });\n\n\t  var defs = templates.element({\n\t    'tag': 'defs',\n\t    'content': style\n\t  });\n\n\t  var svg = templates.element({\n\t    'tag': 'svg',\n\t    'content': [defs, scene],\n\t    'width': root.properties.width,\n\t    'height': root.properties.height,\n\t    'xmlns': SVG_NS,\n\t    'viewBox': [0, 0, root.properties.width, root.properties.height].join(' '),\n\t    'preserveAspectRatio': 'none'\n\t  });\n\n\t  var output = shaven(svg);\n\t  \n\t  output = stylesheetXml + output[0];\n\n\t  var svgString = SVG.svgStringToDataURI(output, renderSettings.mode === 'background');\n\t  return svgString;\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar escape = __webpack_require__(14)\n\n\t// TODO: remove namespace\n\n\tmodule.exports = function shaven (array, namespace, returnObject) {\n\n\t\t'use strict'\n\n\t\tvar i = 1,\n\t\t\tdoesEscape = true,\n\t\t\tHTMLString,\n\t\t\tattributeKey,\n\t\t\tcallback,\n\t\t\tkey\n\n\n\t\treturnObject = returnObject || {}\n\n\n\t\tfunction createElement (sugarString) {\n\n\t\t\tvar tags = sugarString.match(/^\\w+/),\n\t\t\t\telement = {\n\t\t\t\t\ttag: tags ? tags[0] : 'div',\n\t\t\t\t\tattr: {},\n\t\t\t\t\tchildren: []\n\t\t\t\t},\n\t\t\t\tid = sugarString.match(/#([\\w-]+)/),\n\t\t\t\treference = sugarString.match(/\\$([\\w-]+)/),\n\t\t\t\tclassNames = sugarString.match(/\\.[\\w-]+/g)\n\n\n\t\t\t// Assign id if is set\n\t\t\tif (id) {\n\t\t\t\telement.attr.id = id[1]\n\n\t\t\t\t// Add element to the return object\n\t\t\t\treturnObject[id[1]] = element\n\t\t\t}\n\n\t\t\tif (reference)\n\t\t\t\treturnObject[reference[1]] = element\n\n\t\t\tif (classNames)\n\t\t\t\telement.attr.class = classNames.join(' ').replace(/\\./g, '')\n\n\t\t\tif (sugarString.match(/&$/g))\n\t\t\t\tdoesEscape = false\n\n\t\t\treturn element\n\t\t}\n\n\t\tfunction replacer (key, value) {\n\n\t\t\tif (value === null || value === false || value === undefined)\n\t\t\t\treturn\n\n\t\t\tif (typeof value !== 'string' && typeof value !== 'object')\n\t\t\t\treturn String(value)\n\n\t\t\treturn value\n\t\t}\n\n\t\tfunction escapeAttribute (string) {\n\t\t\treturn String(string)\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/\"/g, '&quot;')\n\t\t}\n\n\t\tfunction escapeHTML (string) {\n\t\t\treturn String(string)\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/\"/g, '&quot;')\n\t\t\t\t.replace(/'/g, '&apos;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t}\n\n\n\t\tif (typeof array[0] === 'string')\n\t\t\tarray[0] = createElement(array[0])\n\n\t\telse if (Array.isArray(array[0]))\n\t\t\ti = 0\n\n\t\telse\n\t\t\tthrow new Error(\n\t\t\t\t'First element of array must be a string, ' +\n\t\t\t\t'or an array and not ' + JSON.stringify(array[0])\n\t\t\t)\n\n\n\t\tfor (; i < array.length; i++) {\n\n\t\t\t// Don't render element if value is false or null\n\t\t\tif (array[i] === false || array[i] === null) {\n\t\t\t\tarray[0] = false\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Continue with next array value if current value is undefined or true\n\t\t\telse if (array[i] === undefined || array[i] === true) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'string') {\n\t\t\t\tif (doesEscape)\n\t\t\t\t\tarray[i] = escapeHTML(array[i])\n\n\t\t\t\tarray[0].children.push(array[i])\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'number') {\n\n\t\t\t\tarray[0].children.push(array[i])\n\t\t\t}\n\n\t\t\telse if (Array.isArray(array[i])) {\n\n\t\t\t\tif (Array.isArray(array[i][0])) {\n\t\t\t\t\tarray[i].reverse().forEach(function (subArray) {\n\t\t\t\t\t\tarray.splice(i + 1, 0, subArray)\n\t\t\t\t\t})\n\n\t\t\t\t\tif (i !== 0)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\ti++\n\t\t\t\t}\n\n\t\t\t\tshaven(array[i], namespace, returnObject)\n\n\t\t\t\tif (array[i][0])\n\t\t\t\t\tarray[0].children.push(array[i][0])\n\t\t\t}\n\n\t\t\telse if (typeof array[i] === 'function')\n\t\t\t\tcallback = array[i]\n\n\n\t\t\telse if (typeof array[i] === 'object') {\n\t\t\t\tfor (attributeKey in array[i])\n\t\t\t\t\tif (array[i].hasOwnProperty(attributeKey))\n\t\t\t\t\t\tif (array[i][attributeKey] !== null &&\n\t\t\t\t\t\t\tarray[i][attributeKey] !== false)\n\t\t\t\t\t\t\tif (attributeKey === 'style' &&\n\t\t\t\t\t\t\t\ttypeof array[i][attributeKey] === 'object')\n\t\t\t\t\t\t\t\tarray[0].attr[attributeKey] = JSON\n\t\t\t\t\t\t\t\t\t.stringify(array[i][attributeKey], replacer)\n\t\t\t\t\t\t\t\t\t.slice(2, -2)\n\t\t\t\t\t\t\t\t\t.replace(/\",\"/g, ';')\n\t\t\t\t\t\t\t\t\t.replace(/\":\"/g, ':')\n\t\t\t\t\t\t\t\t\t.replace(/\\\\\"/g, '\\'')\n\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tarray[0].attr[attributeKey] = array[i][attributeKey]\n\t\t\t}\n\n\t\t\telse\n\t\t\t\tthrow new TypeError('\"' + array[i] + '\" is not allowed as a value.')\n\t\t}\n\n\n\t\tif (array[0] !== false) {\n\n\t\t\tHTMLString = '<' + array[0].tag\n\n\t\t\tfor (key in array[0].attr)\n\t\t\t\tif (array[0].attr.hasOwnProperty(key))\n\t\t\t\t\tHTMLString += ' ' + key + '=\"' +\n\t\t\t\t\t\tescapeAttribute(array[0].attr[key] || '') + '\"'\n\n\t\t\tHTMLString += '>'\n\n\t\t\tarray[0].children.forEach(function (child) {\n\t\t\t\tHTMLString += child\n\t\t\t})\n\n\t\t\tHTMLString += '</' + array[0].tag + '>'\n\n\t\t\tarray[0] = HTMLString\n\t\t}\n\n\t\t// Return root element on index 0\n\t\treturnObject[0] = array[0]\n\n\t\tif (callback)\n\t\t\tcallback(array[0])\n\n\t\t// returns object containing all elements with an id and the root element\n\t\treturn returnObject\n\t}\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * escape-html\n\t * Copyright(c) 2012-2013 TJ Holowaychuk\n\t * MIT Licensed\n\t */\n\n\t/**\n\t * Module exports.\n\t * @public\n\t */\n\n\tmodule.exports = escapeHtml;\n\n\t/**\n\t * Escape special characters in the given string of html.\n\t *\n\t * @param  {string} str The string to escape for inserting into HTML\n\t * @return {string}\n\t * @public\n\t */\n\n\tfunction escapeHtml(html) {\n\t  return String(html)\n\t    .replace(/&/g, '&amp;')\n\t    .replace(/\"/g, '&quot;')\n\t    .replace(/'/g, '&#39;')\n\t    .replace(/</g, '&lt;')\n\t    .replace(/>/g, '&gt;');\n\t}\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar DOM = __webpack_require__(9);\n\tvar utils = __webpack_require__(7);\n\n\tmodule.exports = (function() {\n\t    var canvas = DOM.newEl('canvas');\n\t    var ctx = null;\n\n\t    return function(sceneGraph) {\n\t        if (ctx == null) {\n\t            ctx = canvas.getContext('2d');\n\t        }\n\n\t        var dpr = utils.canvasRatio();\n\t        var root = sceneGraph.root;\n\t        canvas.width = dpr * root.properties.width;\n\t        canvas.height = dpr * root.properties.height ;\n\t        ctx.textBaseline = 'middle';\n\n\t        var bg = root.children.holderBg;\n\t        var bgWidth = dpr * bg.width;\n\t        var bgHeight = dpr * bg.height;\n\t        //todo: parametrize outline width (e.g. in scene object)\n\t        var outlineWidth = 2;\n\t        var outlineOffsetWidth = outlineWidth / 2;\n\n\t        ctx.fillStyle = bg.properties.fill;\n\t        ctx.fillRect(0, 0, bgWidth, bgHeight);\n\n\t        if (bg.properties.outline) {\n\t            //todo: abstract this into a method\n\t            ctx.strokeStyle = bg.properties.outline.fill;\n\t            ctx.lineWidth = bg.properties.outline.width;\n\t            ctx.moveTo(outlineOffsetWidth, outlineOffsetWidth);\n\t            // TL, TR, BR, BL\n\t            ctx.lineTo(bgWidth - outlineOffsetWidth, outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth - outlineOffsetWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(outlineOffsetWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(outlineOffsetWidth, outlineOffsetWidth);\n\t            // Diagonals\n\t            ctx.moveTo(0, outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth, bgHeight - outlineOffsetWidth);\n\t            ctx.moveTo(0, bgHeight - outlineOffsetWidth);\n\t            ctx.lineTo(bgWidth, outlineOffsetWidth);\n\t            ctx.stroke();\n\t        }\n\n\t        var textGroup = root.children.holderTextGroup;\n\t        ctx.font = textGroup.properties.font.weight + ' ' + (dpr * textGroup.properties.font.size) + textGroup.properties.font.units + ' ' + textGroup.properties.font.family + ', monospace';\n\t        ctx.fillStyle = textGroup.properties.fill;\n\n\t        for (var lineKey in textGroup.children) {\n\t            var line = textGroup.children[lineKey];\n\t            for (var wordKey in line.children) {\n\t                var word = line.children[wordKey];\n\t                var x = dpr * (textGroup.x + line.x + word.x);\n\t                var y = dpr * (textGroup.y + line.y + word.y + (textGroup.properties.leading / 2));\n\n\t                ctx.fillText(word.properties.text, x, y);\n\t            }\n\t        }\n\n\t        return canvas.toDataURL('image/png');\n\t    };\n\t})();\n\n/***/ }\n/******/ ])\n});\n;\n(function(ctx, isMeteorPackage) {\n    if (isMeteorPackage) {\n        Holder = ctx.Holder;\n    }\n})(this, typeof Meteor !== 'undefined' && typeof Package !== 'undefined');\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/information.js",
    "content": "$(document).ready(function(){\n    var oldPswflag=0;\n    var newPswflag=0;\n    $(\"#name\").text($(\"#nameVal\").text());\n    $(\"#email\").val($(\"#emailVal\").text());\n    $(\"#telephone\").val($(\"#telephoneVal\").text());\n    $(\"#changeInfo\").click(function(){\n        $(\"#update-info\").modal({\n            backdrop:'static'\n        });\n    });\n\n\n    $(\"#saveInfo\").click(function (){\n        var saveInfo={};\n        saveInfo.name=$(\"#name\").val();\n        saveInfo.email=$(\"#email\").val();\n        saveInfo.telephone=$(\"#telephone\").val();\n        $.ajax({\n            type: \"POST\",\n            url: \"/shop/saveInfo\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:saveInfo,\n            dateType:\"json\",\n            success: function(result){\n                if (result.msg==\"更新失败\")\n                {\n                    swal(result.msg);\n                }\n                else {\n                    $(\"#update-info\").modal('hide');\n                    swal(\"修改成功\", \"\", \"success\");\n                    $(\"button\").click(function (){\n                        location.reload();\n                    });\n                }\n            },\n            error:function (){\n                alert(\"更新失败\");\n            }\n        });\n    });\n\n    $(\"#changePsw\").click(function (){\n        $(\"#update-Psw\").modal({\n            backdrop:'static'\n        });\n    });\n\n    $(\"#oldPsw\").blur(function (){\n        if ($(\"#oldPsw\").val()!=$(\"#Psw\").attr(\"Psw\"))\n        {\n            $(\"#oldPswError\").show();\n        }\n        else\n        {\n            $(\"#oldPswError\").hide();\n            oldPswflag=1;\n        }\n    })\n\n   /* $(\"#newPsw\").focus(function (){\n        if ($(\"#oldPsw\").val()==$(\"#Psw\").attr(\"Psw\"))\n        {\n            $(\"#oldPswError\").hide();\n            oldPswflag=1;\n        }\n    });*/\n\n    $(\"#newPsw\").blur(function (){\n        if($(\"#newPsw\").val().length<8)\n        {\n            $(\"#newPswError\").show();\n        }\n        else {\n            $(\"#newPswError\").hide();\n            newPswflag=1;\n        }\n    });\n\n    $(\"#savePsw\").click(function (){\n        if (oldPswflag==1&&newPswflag==1)\n        {\n            var Psw={};\n            Psw.Psw=$(\"#newPsw\").val();\n            $.ajax({\n                type: \"POST\",\n                url: \"/shop/savePsw\",\n                contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n                data:Psw,\n                dateType:\"json\",\n                success: function(result){\n                    if (result.msg==\"更新失败\")\n                    {\n                        swal(result.msg);\n                    }\n                    else {\n                        $(\"#update-info\").modal('hide');\n                        swal(result.msg);\n                        $(\"button\").click(function (){\n                            location.reload();\n                        });\n                    }\n                },\n                error:function (){\n                    alert(\"更新失败\");\n                }\n            });\n        }\n    })\n\n});\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.2.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( \">tbody\", elem )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with computed style\n\tvar valueIsBorderBox,\n\t\tstyles = getStyles( elem ),\n\t\tval = curCSS( elem, name, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test( val ) ) {\n\t\treturn val;\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = isBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t// Fall back to offsetWidth/Height when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\tif ( val === \"auto\" ) {\n\t\tval = elem[ \"offset\" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar doc, docElem, rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\tdoc = elem.ownerDocument;\n\t\tdocElem = doc.documentElement;\n\t\twin = doc.defaultView;\n\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/jquery.raty.js",
    "content": "/*!\n * jQuery Raty - A Star Rating Plugin\n * ------------------------------------------------------------------\n *\n * jQuery Raty is a plugin that generates a customizable star rating.\n *\n * Licensed under The MIT License\n *\n * @version        2.5.2\n * @since          2010.06.11\n * @author         Washington Botelho\n * @documentation  wbotelhos.com/raty\n *\n * ------------------------------------------------------------------\n *\n *  <div id=\"star\"></div>\n *\n *  $('#star').raty();\n *\n */\n\n;(function($) {\n\n  var methods = {\n    init: function(settings) {\n      return this.each(function() {\n        methods.destroy.call(this);\n\n        this.opt = $.extend(true, {}, $.fn.raty.defaults, settings);\n\n        var that  = $(this),\n            inits = ['number', 'readOnly', 'score', 'scoreName'];\n\n        methods._callback.call(this, inits);\n\n        if (this.opt.precision) {\n          methods._adjustPrecision.call(this);\n        }\n\n        this.opt.number = methods._between(this.opt.number, 0, this.opt.numberMax)\n\n        this.opt.path = this.opt.path || '';\n\n        if (this.opt.path && this.opt.path.slice(this.opt.path.length - 1, this.opt.path.length) !== '/') {\n          this.opt.path += '/';\n        }\n\n        this.stars = methods._createStars.call(this);\n        this.score = methods._createScore.call(this);\n\n        methods._apply.call(this, this.opt.score);\n\n        var space  = this.opt.space ? 4 : 0,\n            width  = this.opt.width || (this.opt.number * this.opt.size + this.opt.number * space);\n\n        if (this.opt.cancel) {\n          this.cancel = methods._createCancel.call(this);\n\n          width += (this.opt.size + space);\n        }\n\n        if (this.opt.readOnly) {\n          methods._lock.call(this);\n        } else {\n          that.css('cursor', 'pointer');\n          methods._binds.call(this);\n        }\n\n        if (this.opt.width !== false) {\n          that.css('width', width);\n        }\n\n        methods._target.call(this, this.opt.score);\n\n        that.data({ 'settings': this.opt, 'raty': true });\n      });\n    }, _adjustPrecision: function() {\n      this.opt.targetType = 'score';\n      this.opt.half       = true;\n    }, _apply: function(score) {\n      if (score && score > 0) {\n        score = methods._between(score, 0, this.opt.number);\n        this.score.val(score);\n      }\n\n      methods._fill.call(this, score);\n\n      if (score) {\n        methods._roundStars.call(this, score);\n      }\n    }, _between: function(value, min, max) {\n      return Math.min(Math.max(parseFloat(value), min), max);\n    }, _binds: function() {\n      if (this.cancel) {\n        methods._bindCancel.call(this);\n      }\n\n      methods._bindClick.call(this);\n      methods._bindOut.call(this);\n      methods._bindOver.call(this);\n    }, _bindCancel: function() {\n      methods._bindClickCancel.call(this);\n      methods._bindOutCancel.call(this);\n      methods._bindOverCancel.call(this);\n    }, _bindClick: function() {\n      var self = this,\n          that = $(self);\n\n      self.stars.on('click.raty', function(evt) {\n        self.score.val((self.opt.half || self.opt.precision) ? that.data('score') : this.alt);\n\n        if (self.opt.click) {\n          self.opt.click.call(self, parseFloat(self.score.val()), evt);\n        }\n      });\n    }, _bindClickCancel: function() {\n      var self = this;\n\n      self.cancel.on('click.raty', function(evt) {\n        self.score.removeAttr('value');\n\n        if (self.opt.click) {\n          self.opt.click.call(self, null, evt);\n        }\n      });\n    }, _bindOut: function() {\n      var self = this;\n\n      $(this).on('mouseleave.raty', function(evt) {\n        var score = parseFloat(self.score.val()) || undefined;\n\n        methods._apply.call(self, score);\n        methods._target.call(self, score, evt);\n\n        if (self.opt.mouseout) {\n          self.opt.mouseout.call(self, score, evt);\n        }\n      });\n    }, _bindOutCancel: function() {\n      var self = this;\n\n      self.cancel.on('mouseleave.raty', function(evt) {\n        $(this).attr('src', self.opt.path + self.opt.cancelOff);\n\n        if (self.opt.mouseout) {\n          self.opt.mouseout.call(self, self.score.val() || null, evt);\n        }\n      });\n    }, _bindOverCancel: function() {\n      var self = this;\n\n      self.cancel.on('mouseover.raty', function(evt) {\n        $(this).attr('src', self.opt.path + self.opt.cancelOn);\n\n        self.stars.attr('src', self.opt.path + self.opt.starOff);\n\n        methods._target.call(self, null, evt);\n\n        if (self.opt.mouseover) {\n          self.opt.mouseover.call(self, null);\n        }\n      });\n    }, _bindOver: function() {\n      var self   = this,\n          that   = $(self),\n          action = self.opt.half ? 'mousemove.raty' : 'mouseover.raty';\n\n      self.stars.on(action, function(evt) {\n        var score = parseInt(this.alt, 10);\n\n        if (self.opt.half) {\n          var position = parseFloat((evt.pageX - $(this).offset().left) / self.opt.size),\n              plus     = (position > .5) ? 1 : .5;\n\n          score = score - 1 + plus;\n\n          methods._fill.call(self, score);\n\n          if (self.opt.precision) {\n            score = score - plus + position;\n          }\n\n          methods._roundStars.call(self, score);\n\n          that.data('score', score);\n        } else {\n          methods._fill.call(self, score);\n        }\n\n        methods._target.call(self, score, evt);\n\n        if (self.opt.mouseover) {\n          self.opt.mouseover.call(self, score, evt);\n        }\n      });\n    }, _callback: function(options) {\n      for (i in options) {\n        if (typeof this.opt[options[i]] === 'function') {\n          this.opt[options[i]] = this.opt[options[i]].call(this);\n        }\n      }\n    }, _createCancel: function() {\n      var that   = $(this),\n          icon   = this.opt.path + this.opt.cancelOff,\n          cancel = $('<img />', { src: icon, alt: 'x', title: this.opt.cancelHint, 'class': 'raty-cancel' });\n\n      if (this.opt.cancelPlace == 'left') {\n        that.prepend('&#160;').prepend(cancel);\n      } else {\n        that.append('&#160;').append(cancel);\n      }\n\n      return cancel;\n    }, _createScore: function() {\n      return $('<input />', { type: 'hidden', name: this.opt.scoreName }).appendTo(this);\n    }, _createStars: function() {\n      var that = $(this);\n\n      for (var i = 1; i <= this.opt.number; i++) {\n        var title = methods._getHint.call(this, i),\n            icon  = (this.opt.score && this.opt.score >= i) ? 'starOn' : 'starOff';\n\n        icon = this.opt.path + this.opt[icon];\n\n        $('<img />', { src : icon, alt: i, title: title }).appendTo(this);\n\n        if (this.opt.space) {\n          that.append((i < this.opt.number) ? '&#160;' : '');\n        }\n      }\n\n      return that.children('img');\n    }, _error: function(message) {\n      $(this).html(message);\n\n      $.error(message);\n    }, _fill: function(score) {\n      var self  = this,\n          hash  = 0;\n\n      for (var i = 1; i <= self.stars.length; i++) {\n        var star   = self.stars.eq(i - 1),\n            select = self.opt.single ? (i == score) : (i <= score);\n\n        if (self.opt.iconRange && self.opt.iconRange.length > hash) {\n          var irange = self.opt.iconRange[hash],\n              on     = irange.on  || self.opt.starOn,\n              off    = irange.off || self.opt.starOff,\n              icon   = select ? on : off;\n\n          if (i <= irange.range) {\n            star.attr('src', self.opt.path + icon);\n          }\n\n          if (i == irange.range) {\n            hash++;\n          }\n        } else {\n          var icon = select ? 'starOn' : 'starOff';\n\n          star.attr('src', this.opt.path + this.opt[icon]);\n        }\n      }\n    }, _getHint: function(score) {\n      var hint = this.opt.hints[score - 1];\n      return (hint === '') ? '' : (hint || score);\n    }, _lock: function() {\n      var score = parseInt(this.score.val(), 10), // TODO: 3.1 >> [['1'], ['2'], ['3', '.1', '.2']]\n          hint  = score ? methods._getHint.call(this, score) : this.opt.noRatedMsg;\n\n      $(this).data('readonly', true).css('cursor', '').attr('title', hint);\n\n      this.score.attr('readonly', 'readonly');\n      this.stars.attr('title', hint);\n\n      if (this.cancel) {\n        this.cancel.hide();\n      }\n    }, _roundStars: function(score) {\n      var rest = (score - Math.floor(score)).toFixed(2);\n\n      if (rest > this.opt.round.down) {\n        var icon = 'starOn';                                 // Up:   [x.76 .. x.99]\n\n        if (this.opt.halfShow && rest < this.opt.round.up) { // Half: [x.26 .. x.75]\n          icon = 'starHalf';\n        } else if (rest < this.opt.round.full) {             // Down: [x.00 .. x.5]\n          icon = 'starOff';\n        }\n\n        this.stars.eq(Math.ceil(score) - 1).attr('src', this.opt.path + this.opt[icon]);\n      }                              // Full down: [x.00 .. x.25]\n    }, _target: function(score, evt) {\n      if (this.opt.target) {\n        var target = $(this.opt.target);\n\n        if (target.length === 0) {\n          methods._error.call(this, 'Target selector invalid or missing!');\n        }\n\n        if (this.opt.targetFormat.indexOf('{score}') < 0) {\n          methods._error.call(this, 'Template \"{score}\" missing!');\n        }\n\n        var mouseover = evt && evt.type == 'mouseover';\n\n        if (score === undefined) {\n          score = this.opt.targetText;\n        } else if (score === null) {\n          score = mouseover ? this.opt.cancelHint : this.opt.targetText;\n        } else {\n          if (this.opt.targetType == 'hint') {\n            score = methods._getHint.call(this, Math.ceil(score));\n          } else if (this.opt.precision) {\n            score = parseFloat(score).toFixed(1);\n          }\n\n          if (!mouseover && !this.opt.targetKeep) {\n            score = this.opt.targetText;\n          }\n        }\n\n        if (score) {\n          score = this.opt.targetFormat.toString().replace('{score}', score);\n        }\n\n        if (target.is(':input')) {\n          target.val(score);\n        } else {\n          target.html(score);\n        }\n      }\n    }, _unlock: function() {\n      $(this).data('readonly', false).css('cursor', 'pointer').removeAttr('title');\n\n      this.score.removeAttr('readonly', 'readonly');\n\n      for (var i = 0; i < this.opt.number; i++) {\n        this.stars.eq(i).attr('title', methods._getHint.call(this, i + 1));\n      }\n\n      if (this.cancel) {\n        this.cancel.css('display', '');\n      }\n    }, cancel: function(click) {\n      return this.each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods[click ? 'click' : 'score'].call(this, null);\n          this.score.removeAttr('value');\n        }\n      });\n    }, click: function(score) {\n      return $(this).each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods._apply.call(this, score);\n\n          if (!this.opt.click) {\n            methods._error.call(this, 'You must add the \"click: function(score, evt) { }\" callback.');\n          }\n\n          this.opt.click.call(this, score, { type: 'click' });\n\n          methods._target.call(this, score);\n        }\n      });\n    }, destroy: function() {\n      return $(this).each(function() {\n        var that = $(this),\n            raw  = that.data('raw');\n\n        if (raw) {\n          that.off('.raty').empty().css({ cursor: raw.style.cursor, width: raw.style.width }).removeData('readonly');\n        } else {\n          that.data('raw', that.clone()[0]);\n        }\n      });\n    }, getScore: function() {\n      var score = [],\n          value ;\n\n      $(this).each(function() {\n        value = this.score.val();\n\n        score.push(value ? parseFloat(value) : undefined);\n      });\n\n      return (score.length > 1) ? score : score[0];\n    }, readOnly: function(readonly) {\n      return this.each(function() {\n        var that = $(this);\n\n        if (that.data('readonly') !== readonly) {\n          if (readonly) {\n            that.off('.raty').children('img').off('.raty');\n\n            methods._lock.call(this);\n          } else {\n            methods._binds.call(this);\n            methods._unlock.call(this);\n          }\n\n          that.data('readonly', readonly);\n        }\n      });\n    }, reload: function() {\n      return methods.set.call(this, {});\n    }, score: function() {\n      return arguments.length ? methods.setScore.apply(this, arguments) : methods.getScore.call(this);\n    }, set: function(settings) {\n      return this.each(function() {\n        var that   = $(this),\n            actual = that.data('settings'),\n            news   = $.extend({}, actual, settings);\n\n        that.raty(news);\n      });\n    }, setScore: function(score) {\n      return $(this).each(function() {\n        if ($(this).data('readonly') !== true) {\n          methods._apply.call(this, score);\n          methods._target.call(this, score);\n        }\n      });\n    }\n  };\n\n  $.fn.raty = function(method) {\n    if (methods[method]) {\n      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if (typeof method === 'object' || !method) {\n      return methods.init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist!');\n    }\n  };\n\n  $.fn.raty.defaults = {\n    cancel        : false,\n    cancelHint    : 'Cancel this rating!',\n    cancelOff     : 'cancel-off.png',\n    cancelOn      : 'cancel-on.png',\n    cancelPlace   : 'left',\n    click         : undefined,\n    half          : false,\n    halfShow      : true,\n    hints         : ['bad', 'poor', 'regular', 'good', 'gorgeous'],\n    iconRange     : undefined,\n    mouseout      : undefined,\n    mouseover     : undefined,\n    noRatedMsg    : 'Not rated yet!',\n    number        : 5,\n    numberMax     : 20,\n    path          : '',\n    precision     : false,\n    readOnly      : false,\n    round         : { down: .25, full: .6, up: .76 },\n    score         : undefined,\n    scoreName     : 'score',\n    single        : false,\n    size          : 16,\n    space         : true,\n    starHalf      : 'star-half.png',\n    starOff       : 'star-off.png',\n    starOn        : 'star-on.png',\n    target        : undefined,\n    targetFormat  : '{score}',\n    targetKeep    : false,\n    targetText    : '',\n    targetType    : 'hint',\n    width         : undefined\n  };\n\n})(jQuery);\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/list.js",
    "content": "$(document).ready(function (){\n   $(\"[name='deleteList']\").click(function (){\n       var orderid=$(this).parents(\"[name='parent']\").find(\"[name='orderid']\").text();\n       var order={};\n       order.orderid= parseInt(orderid);\n       $.ajax({\n           type:\"POST\",\n           url:\"/shop/deleteList\",\n           contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n           data:order,\n           dataType:\"json\",\n           success:function (result){\n               swal(result.msg);\n               $(\"button\").click(function (){\n                   location.reload();\n               });\n           },\n           error:function (){\n               alert(\"删除失败\");\n           }\n       });\n   });\n\n    $(\"[name='finishList']\").click(function (){\n        var orderid=$(this).parents(\"[name='parent']\").find(\"[name='orderid']\").text();\n        var order={};\n        order.orderid=orderid;\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/finishList\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:order,\n            dataType:\"json\",\n            success:function (result){\n                swal(result.msg);\n                $(\"button\").click(function (){\n                    location.reload();\n                });\n            },\n            error:function (){\n                alert(\"点击失败\");\n            }\n        });\n    })\n\n    var goodsId={};\n\n    $(\"[name='evaluate']\").click(function (){\n        $(\"#evaluate\").modal({\n            backdrop:'static'\n        });\n        goodsId=$(this).parents(\".table-bordered\").find(\".col-lg-1\").eq(0).text();\n\n    })\n\n    $(\"#star\").raty({path: '../image/img'});\n\n    $(\"#saveEvaluate\").click(function (){\n        var score=$(\"[name='score']\").val();\n        var content=$(\"#description\").val();\n        var comment={};\n        comment.commentid={};\n        comment.userid={};\n        comment.goodsid=goodsId;\n        comment.point=score;\n        comment.content=content;\n        $.ajax({\n            type:\"POST\",\n            url:\"/shop/comment\",\n            contentType:\"application/x-www-form-urlencoded; charset=utf-8\",\n            data:comment,\n            dataType:\"json\",\n            success:function (result){\n                $(\"#evaluate\").modal('hide');\n                swal(result.msg);\n            },\n            error:function (){\n                alert(\"评论失败\");\n            }\n        });\n\n\n    })\n\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/login.js",
    "content": "\n$.validator.setDefaults({\n\tsubmitHandler: function() {\n\t\tform.submit();\n\t}\n});\n$(document).ready(function() {\n\t$('#form2').validate({\n\t\trules: {\n\t\t\tusername: \"required\",\n\t\t\t\n\t\t\tpassword: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\tconfirmlogo: \"required\",\n\t\t},\n\t\tmessages: {\n\t\t\tusername: \"用户名输入不能为空\",\n\t\t\t\n\t\t\tpassword: {\n\t\t\t\trequired: \"密码输入不能为空\",\n\t\t\t},\n\t\t\tconfirmlogo: \"验证码输入不能为空\",\n\t\t}\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/mqttws31.js",
    "content": "/*******************************************************************************\n * Copyright (c) 2013 IBM Corp.\n *\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * and Eclipse Distribution License v1.0 which accompany this distribution. \n *\n * The Eclipse Public License is available at \n *    http://www.eclipse.org/legal/epl-v10.html\n * and the Eclipse Distribution License is available at \n *   http://www.eclipse.org/org/documents/edl-v10.php.\n *\n * Contributors:\n *    Andrew Banks - initial API and implementation and initial documentation\n *******************************************************************************/\n\n\n// Only expose a single object name in the global namespace.\n// Everything must go through this module. Global Messaging module\n// only has a single public function, client, which returns\n// a Messaging client object given connection details.\n \n/**\n * @namespace Messaging \n * Send and receive messages using web browsers.\n * <p> \n * This programming interface lets a JavaScript client application use the MQTT V3.1 protocol to \n * connect to an MQTT-supporting messaging server.\n *  \n * The function supported includes:\n * <ol>\n * <li>Connecting to and disconnecting from a server. The server is identified by its host name and port number. \n * <li>Specifying options that relate to the communications link with the server, \n * for example the frequency of keep-alive heartbeats, and whether SSL/TLS is required.\n * <li>Subscribing to and receiving messages from MQTT Topics.\n * <li>Publishing messages to MQTT Topics.\n * </ol>\n * <p>\n * <h2>The API consists of two main objects:</h2>\n * The <b>Messaging.Client</b> object. This contains methods that provide the functionality of the API,\n * including provision of callbacks that notify the application when a message arrives from or is delivered to the messaging server,\n * or when the status of its connection to the messaging server changes.\n * <p>\n * The <b>Messaging.Message</b> object. This encapsulates the payload of the message along with various attributes\n * associated with its delivery, in particular the destination to which it has been (or is about to be) sent. \n * <p>\n * The programming interface validates parameters passed to it, and will throw an Error containing an error message\n * intended for developer use, if it detects an error with any parameter.\n * <p>\n * Example:\n * \n * <code><pre>\nclient = new Messaging.Client(location.hostname, Number(location.port), \"clientId\");\nclient.onConnectionLost = onConnectionLost;\nclient.onMessageArrived = onMessageArrived;\nclient.connect({onSuccess:onConnect});\n\nfunction onConnect() {\n  // Once a connection has been made, make a subscription and send a message.\n  console.log(\"onConnect\");\n  client.subscribe(\"/World\");\n  message = new Messaging.Message(\"Hello\");\n  message.destinationName = \"/World\";\n  client.send(message); \n};\nfunction onConnectionLost(responseObject) {\n  if (responseObject.errorCode !== 0)\n    console.log(\"onConnectionLost:\"+responseObject.errorMessage);\n};\nfunction onMessageArrived(message) {\n  console.log(\"onMessageArrived:\"+message.payloadString);\n  client.disconnect(); \n};\t\n * </pre></code>\n * <p>\n * Other programming languages,\n * <a href=\"/clients/java/doc/javadoc/index.html\"><big>Java</big></a>,\n * <a href=\"/clients/c/doc/html/index.html\"><big>C</big></a>.\n */\nMessaging = (function (global) {\n\n    // Private variables below, these are only visible inside the function closure\n    // which is used to define the module. \n\n\tvar version = \"0.0.0.0\";\n\tvar buildLevel = \"@BUILDLEVEL@\";\n\t\n    /** \n     * Unique message type identifiers, with associated\n     * associated integer values.\n     * @private \n     */\n    var MESSAGE_TYPE = {\n        CONNECT: 1, \n        CONNACK: 2, \n        PUBLISH: 3,\n        PUBACK: 4,\n        PUBREC: 5, \n        PUBREL: 6,\n        PUBCOMP: 7,\n        SUBSCRIBE: 8,\n        SUBACK: 9,\n        UNSUBSCRIBE: 10,\n        UNSUBACK: 11,\n        PINGREQ: 12,\n        PINGRESP: 13,\n        DISCONNECT: 14\n    };\n    \n    // Collection of utility methods used to simplify module code \n    // and promote the DRY pattern.  \n\n    /**\n     * Validate an object's parameter names to ensure they \n     * match a list of expected variables name for this option\n     * type. Used to ensure option object passed into the API don't\n     * contain erroneous parameters.\n     * @param {Object} obj User options object\n     * @param {key:type, key2:type, ...} valid keys and types that may exist in obj. \n     * @throws {Error} Invalid option parameter found. \n     * @private \n     */\n    var validate = function(obj, keys) {\n        for(key in obj) {\n        \tif (obj.hasOwnProperty(key)) {       \t\t\n        \t    if (keys.hasOwnProperty(key)) {\n        \t        if (typeof obj[key] !== keys[key])\n        \t\t       throw new Error(format(ERROR.INVALID_TYPE, [typeof obj[key], key]));\n        \t    } else {\t\n            \t    var errorStr = \"Unknown property, \" + key + \". Valid properties are:\";\n            \t    for (key in keys)\n            \t\t    if (keys.hasOwnProperty(key))\n            \t\t        errorStr = errorStr+\" \"+key;\n            \t    throw new Error(errorStr);\n                }\n        \t}\n        }\n    };\n\n    /**\n     * Return a new function which runs the user function bound\n     * to a fixed scope. \n     * @param {function} User function\n     * @param {object} Function scope  \n     * @return {function} User function bound to another scope\n     * @private \n     */\n    var scope = function (f, scope) {\n        return function () {\n            return f.apply(scope, arguments);\n        };\n    };\n    \n    /** \n     * Unique message type identifiers, with associated\n     * associated integer values.\n     * @private \n     */\n    var ERROR = {\n    \tOK: {code:0, text:\"AMQJSC0000I OK.\"},\n    \tCONNECT_TIMEOUT: {code:1, text:\"AMQJSC0001E Connect timed out.\"},\n        SUBSCRIBE_TIMEOUT: {code:2, text:\"AMQJS0002E Subscribe timed out.\"}, \n        UNSUBSCRIBE_TIMEOUT: {code:3, text:\"AMQJS0003E Unsubscribe timed out.\"},\n        PING_TIMEOUT: {code:4, text:\"AMQJS0004E Ping timed out.\"},\n        INTERNAL_ERROR: {code:5, text:\"AMQJS0005E Internal error.\"},\n        CONNACK_RETURNCODE: {code:6, text:\"AMQJS0006E Bad Connack return code:{0} {1}.\"},\n        SOCKET_ERROR: {code:7, text:\"AMQJS0007E Socket error:{0}.\"},\n        SOCKET_CLOSE: {code:8, text:\"AMQJS0008I Socket closed.\"},\n        MALFORMED_UTF: {code:9, text:\"AMQJS0009E Malformed UTF data:{0} {1} {2}.\"},\n        UNSUPPORTED: {code:10, text:\"AMQJS0010E {0} is not supported by this browser.\"},\n        INVALID_STATE: {code:11, text:\"AMQJS0011E Invalid state {0}.\"},\n        INVALID_TYPE: {code:12, text:\"AMQJS0012E Invalid type {0} for {1}.\"},\n        INVALID_ARGUMENT: {code:13, text:\"AMQJS0013E Invalid argument {0} for {1}.\"},\n        UNSUPPORTED_OPERATION: {code:14, text:\"AMQJS0014E Unsupported operation.\"},\n        INVALID_STORED_DATA: {code:15, text:\"AMQJS0015E Invalid data in local storage key={0} value={1}.\"},\n        INVALID_MQTT_MESSAGE_TYPE: {code:16, text:\"AMQJS0016E Invalid MQTT message type {0}.\"},\n        MALFORMED_UNICODE: {code:17, text:\"AMQJS0017E Malformed Unicode string:{0} {1}.\"},\n    };\n    \n    /** CONNACK RC Meaning. */\n    var CONNACK_RC = {\n   \t\t0:\"Connection Accepted\",\n   \t\t1:\"Connection Refused: unacceptable protocol version\",\n   \t\t2:\"Connection Refused: identifier rejected\",\n   \t\t3:\"Connection Refused: server unavailable\",\n   \t\t4:\"Connection Refused: bad user name or password\",\n   \t\t5:\"Connection Refused: not authorized\"\n    };\n \n    /**\n     * Format an error message text.\n     * @private\n     * @param {error} ERROR.KEY value above.\n     * @param {substitutions} [array] substituted into the text.\n     * @return the text with the substitutions made.\n     */\n    var format = function(error, substitutions) {\n    \tvar text = error.text;\n    \tif (substitutions) {\n    \t  for (var i=0; i<substitutions.length; i++) {\n    \t\tfield = \"{\"+i+\"}\";\n    \t\tstart = text.indexOf(field);\n    \t\tif(start > 0) {\n    \t\t\tvar part1 = text.substring(0,start);\n    \t\t\tvar part2 = text.substring(start+field.length);\n    \t\t\ttext = part1+substitutions[i]+part2;\n    \t\t}\n    \t  }\n    \t}\n    \treturn text;\n    };\n    \n    //MQTT protocol and version        6    M    Q    I    s    d    p    3\n    var MqttProtoIdentifier = [0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03];\n    \n    /**\n     * @ignore\n     * Construct an MQTT wire protocol message.\n     * @param type MQTT packet type.\n     * @param options optional wire message attributes.\n     * \n     * Optional properties\n     * \n     * messageIdentifier: message ID in the range [0..65535]\n     * payloadMessage:\tApplication Message - PUBLISH only\n     * connectStrings:\tarray of 0 or more Strings to be put into the CONNECT payload\n     * topics:\t\t\tarray of strings (SUBSCRIBE, UNSUBSCRIBE)\n     * requestQoS:\t\tarray of QoS values [0..2]\n     *  \n     * \"Flag\" properties \n     * cleanSession:\ttrue if present / false if absent (CONNECT)\n     * willMessage:  \ttrue if present / false if absent (CONNECT)\n     * isRetained:\t\ttrue if present / false if absent (CONNECT)\n     * userName:\t\ttrue if present / false if absent (CONNECT)\n     * password:\t\ttrue if present / false if absent (CONNECT)\n     * keepAliveInterval:\tinteger [0..65535]  (CONNECT)\n     *\n     * @private\n     */\n    var WireMessage = function (type, options) { \t\n        this.type = type;\n        for(name in options) {\n            if (options.hasOwnProperty(name)) {\n                this[name] = options[name];\n            }\n        }\n    };\n    \n    WireMessage.prototype.encode = function() {\n    \t// Compute the first byte of the fixed header\n    \tvar first = ((this.type & 0x0f) << 4);\n    \t\n    \t/*\n    \t * Now calculate the length of the variable header + payload by adding up the lengths\n    \t * of all the component parts\n    \t */\n\n    \tremLength = 0;\n    \ttopicStrLength = new Array();\n    \t\n    \t// if the message contains a messageIdentifier then we need two bytes for that\n    \tif (this.messageIdentifier != undefined)\n    \t\tremLength += 2;\n\n    \tswitch(this.type) {\n    \t    // If this a Connect then we need to include 12 bytes for its header\n\t        case MESSAGE_TYPE.CONNECT:\n\t        \tremLength += MqttProtoIdentifier.length + 3;\n                remLength += UTF8Length(this.clientId) + 2;\n\t\t\t    if (this.willMessage != undefined) {\n\t\t\t    \tremLength += UTF8Length(this.willMessage.destinationName) + 2;\n                    // Will message is always a string, sent as UTF-8 characters with a preceding length.\n\t\t\t\t    var willMessagePayloadBytes = this.willMessage.payloadBytes;\n\t\t\t\t    if (!(willMessagePayloadBytes instanceof Uint8Array))\n\t\t        \t\twillMessagePayloadBytes = new Uint8Array(payloadBytes);\n                    remLength += willMessagePayloadBytes.byteLength +2;\n    \t        }\n                if (this.userName != undefined)\n                    remLength += UTF8Length(this.userName) + 2;\n                if (this.password != undefined)\n                    remLength += UTF8Length(this.password) + 2;\n\t\t\tbreak;\n\n\t\t\t// Subscribe, Unsubscribe can both contain topic strings\n\t        case MESSAGE_TYPE.SUBSCRIBE:\t        \t\n\t        \tfirst |= 0x02; // Qos = 1;\n\t        \tfor ( var i = 0; i < this.topics.length; i++) {\n\t        \t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t        \t\tremLength += topicStrLength[i] + 2;\n\t        \t}\n\t        \tremLength += this.requestedQos.length; // 1 byte for each topic's Qos\n\t        \t// QoS on Subscribe only\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.UNSUBSCRIBE:\n\t        \tfirst |= 0x02; // Qos = 1;\n\t        \tfor ( var i = 0; i < this.topics.length; i++) {\n\t        \t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t        \t\tremLength += topicStrLength[i] + 2;\n\t        \t}\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.PUBLISH:\n\t        \tif (this.payloadMessage.duplicate) first |= 0x08;\n\t        \tfirst  = first |= (this.payloadMessage.qos << 1);\n\t        \tif (this.payloadMessage.retained) first |= 0x01;\n\t        \tdestinationNameLength = UTF8Length(this.payloadMessage.destinationName);\n\t        \tremLength += destinationNameLength + 2;\t   \n\t        \tvar payloadBytes = this.payloadMessage.payloadBytes;\n\t        \tremLength += payloadBytes.byteLength;  \n\t        \tif (payloadBytes instanceof ArrayBuffer)\n\t        \t\tpayloadBytes = new Uint8Array(payloadBytes);\n\t        \telse if (!(payloadBytes instanceof Uint8Array))\n\t        \t\tpayloadBytes = new Uint8Array(payloadBytes.buffer);\n\t        \tbreak;\n\n\t        case MESSAGE_TYPE.DISCONNECT:\n\t        \tbreak;\n\n\t        default:\n\t        \t;\n    \t}\n\n    \t// Now we can allocate a buffer for the message\n\n    \tvar mbi = encodeMBI(remLength);  // Convert the length to MQTT MBI format\n    \tvar pos = mbi.length + 1;        // Offset of start of variable header\n    \tvar buffer = new ArrayBuffer(remLength + pos);\n    \tvar byteStream = new Uint8Array(buffer);    // view it as a sequence of bytes\n\n    \t//Write the fixed header into the buffer\n    \tbyteStream[0] = first;\n    \tbyteStream.set(mbi,1);\n\n    \t// If this is a PUBLISH then the variable header starts with a topic\n    \tif (this.type == MESSAGE_TYPE.PUBLISH)\n    \t\tpos = writeString(this.payloadMessage.destinationName, destinationNameLength, byteStream, pos);\n    \t// If this is a CONNECT then the variable header contains the protocol name/version, flags and keepalive time\n    \t\n    \telse if (this.type == MESSAGE_TYPE.CONNECT) {\n    \t\tbyteStream.set(MqttProtoIdentifier, pos);\n    \t\tpos += MqttProtoIdentifier.length;\n    \t\tvar connectFlags = 0;\n    \t\tif (this.cleanSession) \n    \t\t\tconnectFlags = 0x02;\n    \t\tif (this.willMessage != undefined ) {\n    \t\t\tconnectFlags |= 0x04;\n    \t\t\tconnectFlags |= (this.willMessage.qos<<3);\n    \t\t\tif (this.willMessage.retained) {\n    \t\t\t\tconnectFlags |= 0x20;\n    \t\t\t}\n    \t\t}\n    \t\tif (this.userName != undefined)\n    \t\t\tconnectFlags |= 0x80;\n            if (this.password != undefined)\n    \t\t    connectFlags |= 0x40;\n    \t\tbyteStream[pos++] = connectFlags; \n    \t\tpos = writeUint16 (this.keepAliveInterval, byteStream, pos);\n    \t}\n\n    \t// Output the messageIdentifier - if there is one\n    \tif (this.messageIdentifier != undefined)\n    \t\tpos = writeUint16 (this.messageIdentifier, byteStream, pos);\n\n    \tswitch(this.type) {\n    \t    case MESSAGE_TYPE.CONNECT:\n    \t\t    pos = writeString(this.clientId, UTF8Length(this.clientId), byteStream, pos); \n    \t\t    if (this.willMessage != undefined) {\n    \t\t        pos = writeString(this.willMessage.destinationName, UTF8Length(this.willMessage.destinationName), byteStream, pos);\n    \t\t        pos = writeUint16(willMessagePayloadBytes.byteLength, byteStream, pos);\n    \t\t        byteStream.set(willMessagePayloadBytes, pos);\n\t\t        \tpos += willMessagePayloadBytes.byteLength;\n    \t\t        \n    \t        }\n    \t\tif (this.userName != undefined) \n    \t\t\tpos = writeString(this.userName, UTF8Length(this.userName), byteStream, pos);\n    \t\tif (this.password != undefined) \n    \t\t\tpos = writeString(this.password, UTF8Length(this.password), byteStream, pos);\n    \t\tbreak;\n\n    \t    case MESSAGE_TYPE.PUBLISH:\t\n    \t    \t// PUBLISH has a text or binary payload, if text do not add a 2 byte length field, just the UTF characters.\t\n    \t    \tbyteStream.set(payloadBytes, pos);\n    \t    \t\t\n    \t    \tbreak;\n\n//    \t    case MESSAGE_TYPE.PUBREC:\t\n//    \t    case MESSAGE_TYPE.PUBREL:\t\n//    \t    case MESSAGE_TYPE.PUBCOMP:\t\n//    \t    \tbreak;\n\n    \t    case MESSAGE_TYPE.SUBSCRIBE:\n    \t    \t// SUBSCRIBE has a list of topic strings and request QoS\n    \t    \tfor (var i=0; i<this.topics.length; i++) {\n    \t    \t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n    \t    \t\tbyteStream[pos++] = this.requestedQos[i];\n    \t    \t}\n    \t    \tbreak;\n\n    \t    case MESSAGE_TYPE.UNSUBSCRIBE:\t\n    \t    \t// UNSUBSCRIBE has a list of topic strings\n    \t    \tfor (var i=0; i<this.topics.length; i++)\n    \t    \t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n    \t    \tbreak;\n\n    \t    default:\n    \t    \t// Do nothing.\n    \t}\n\n    \treturn buffer;\n    }\t\n\n    function decodeMessage(input) {\n    \t//var msg = new Object();  // message to be constructed\n    \tvar first = input[0];\n    \tvar type = first >> 4;\n    \tvar messageInfo = first &= 0x0f;\n    \tvar pos = 1;\n    \t\n\n    \t// Decode the remaining length (MBI format)\n\n    \tvar digit;\n    \tvar remLength = 0;\n    \tvar multiplier = 1;\n    \tdo {\n    \t\tdigit = input[pos++];\n    \t\tremLength += ((digit & 0x7F) * multiplier);\n    \t\tmultiplier *= 128;\n    \t} while ((digit & 0x80) != 0);\n\n    \tvar wireMessage = new WireMessage(type);\n    \tswitch(type) {\n            case MESSAGE_TYPE.CONNACK:\n    \t    \twireMessage.topicNameCompressionResponse = input[pos++];\n    \t        wireMessage.returnCode = input[pos++];\n    \t\t    break;\n    \t    \n    \t    case MESSAGE_TYPE.PUBLISH:     \t    \t\n    \t    \tvar qos = (messageInfo >> 1) & 0x03;\n    \t    \t   \t\t    \n    \t    \tvar len = readUint16(input, pos);\n    \t\t    pos += 2;\n    \t\t    var topicName = parseUTF8(input, pos, len);\n    \t\t    pos += len;\n    \t\t    // If QoS 1 or 2 there will be a messageIdentifier\n                if (qos > 0) {\n    \t\t        wireMessage.messageIdentifier = readUint16(input, pos);\n    \t\t        pos += 2;\n                }\n                \n                var message = new Messaging.Message(input.subarray(pos));\n                if ((messageInfo & 0x01) == 0x01) \n    \t    \t\tmessage.retained = true;\n    \t    \tif ((messageInfo & 0x08) == 0x08)\n    \t    \t\tmessage.duplicate =  true;\n                message.qos = qos;\n                message.destinationName = topicName;\n                wireMessage.payloadMessage = message;\t\n    \t\t    break;\n    \t    \n    \t    case  MESSAGE_TYPE.PUBACK:\n    \t    case  MESSAGE_TYPE.PUBREC:\t    \n    \t    case  MESSAGE_TYPE.PUBREL:    \n    \t    case  MESSAGE_TYPE.PUBCOMP:\n    \t    case  MESSAGE_TYPE.UNSUBACK:    \t    \t\n    \t    \twireMessage.messageIdentifier = readUint16(input, pos);\n        \t\tbreak;\n    \t\t    \n    \t    case  MESSAGE_TYPE.SUBACK:\n    \t    \twireMessage.messageIdentifier = readUint16(input, pos);\n        \t\tpos += 2;\n    \t        wireMessage.grantedQos = input.subarray(pos);\t\n    \t\t    break;\n    \t\n    \t    default:\n    \t    \t;\n    \t}\n    \t    \t\n    \treturn wireMessage;\t\n    }\n\n    function writeUint16(input, buffer, offset) {\n    \tbuffer[offset++] = input >> 8;      //MSB\n    \tbuffer[offset++] = input % 256;     //LSB \n    \treturn offset;\n    }\t\n\n    function writeString(input, utf8Length, buffer, offset) {\n    \toffset = writeUint16(utf8Length, buffer, offset);\n    \tstringToUTF8(input, buffer, offset);\n    \treturn offset + utf8Length;\n    }\t\n\n    function readUint16(buffer, offset) {\n    \treturn 256*buffer[offset] + buffer[offset+1];\n    }\t\n\n    /**\n     * Encodes an MQTT Multi-Byte Integer\n     * @private \n     */\n    function encodeMBI(number) {\n    \tvar output = new Array(1);\n    \tvar numBytes = 0;\n\n    \tdo {\n    \t\tvar digit = number % 128;\n    \t\tnumber = number >> 7;\n    \t\tif (number > 0) {\n    \t\t\tdigit |= 0x80;\n    \t\t}\n    \t\toutput[numBytes++] = digit;\n    \t} while ( (number > 0) && (numBytes<4) );\n\n    \treturn output;\n    }\n\n    /**\n     * Takes a String and calculates its length in bytes when encoded in UTF8.\n     * @private\n     */\n    function UTF8Length(input) {\n    \tvar output = 0;\n    \tfor (var i = 0; i<input.length; i++) \n    \t{\n    \t\tvar charCode = input.charCodeAt(i);\n                if (charCode > 0x7FF)\n                   {\n                      // Surrogate pair means its a 4 byte character\n                      if (0xD800 <= charCode && charCode <= 0xDBFF)\n                        {\n                          i++;\n                          output++;\n                        }\n    \t\t       output +=3;\n                   }\n    \t\telse if (charCode > 0x7F)\n    \t\t\toutput +=2;\n    \t\telse\n    \t\t\toutput++;\n    \t} \n    \treturn output;\n    }\n    \n    /**\n     * Takes a String and writes it into an array as UTF8 encoded bytes.\n     * @private\n     */\n    function stringToUTF8(input, output, start) {\n    \tvar pos = start;\n    \tfor (var i = 0; i<input.length; i++) {\n    \t\tvar charCode = input.charCodeAt(i);\n    \t\t\n    \t\t// Check for a surrogate pair.\n    \t\tif (0xD800 <= charCode && charCode <= 0xDBFF) {\n    \t        lowCharCode = input.charCodeAt(++i);\n    \t        if (isNaN(lowCharCode)) {\n    \t        \tthrow new Error(format(ERROR.MALFORMED_UNICODE, [charCode, lowCharCode]));\n    \t        }\n    \t        charCode = ((charCode - 0xD800)<<10) + (lowCharCode - 0xDC00) + 0x10000;\n    \t    \n    \t    }\n    \t\t\n    \t\tif (charCode <= 0x7F) {\n    \t\t\toutput[pos++] = charCode;\n    \t\t} else if (charCode <= 0x7FF) {\n    \t\t\toutput[pos++] = charCode>>6  & 0x1F | 0xC0;\n    \t\t\toutput[pos++] = charCode     & 0x3F | 0x80;\n    \t\t} else if (charCode <= 0xFFFF) {    \t\t\t\t    \n    \t        output[pos++] = charCode>>12 & 0x0F | 0xE0;\n        \t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;   \n        \t\toutput[pos++] = charCode     & 0x3F | 0x80;   \n    \t\t} else {\n    \t\t\toutput[pos++] = charCode>>18 & 0x07 | 0xF0;\n        \t\toutput[pos++] = charCode>>12 & 0x3F | 0x80;\n        \t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;\n        \t\toutput[pos++] = charCode     & 0x3F | 0x80;\n    \t\t};\n    \t} \n    \treturn output;\n    }\n    \n    function parseUTF8(input, offset, length) {\n    \tvar output = \"\";\n    \tvar utf16;\n    \tvar pos = offset;\n\n    \twhile (pos < offset+length)\n    \t{\n    \t\tvar byte1 = input[pos++];\n    \t\tif (byte1 < 128)\n    \t\t\tutf16 = byte1;\n    \t\telse \n    \t\t{\n    \t\t\tvar byte2 = input[pos++]-128;\n    \t\t\tif (byte2 < 0) \n    \t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16),\"\"]));\n    \t\t\tif (byte1 < 0xE0)             // 2 byte character\n    \t\t\t\tutf16 = 64*(byte1-0xC0) + byte2;\n    \t\t\telse \n    \t\t\t{ \n    \t\t\t\tvar byte3 = input[pos++]-128;\n    \t\t\t\tif (byte3 < 0) \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16)]));\n    \t\t\t\tif (byte1 < 0xF0)        // 3 byte character\n    \t\t\t\t\tutf16 = 4096*(byte1-0xE0) + 64*byte2 + byte3;\n                                else\n                                {\n                                   var byte4 = input[pos++]-128;\n                                   if (byte4 < 0) \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n                                   if (byte1 < 0xF8)        // 4 byte character \n                                           utf16 = 262144*(byte1-0xF0) + 4096*byte2 + 64*byte3 + byte4;\n    \t\t\t\t   else                     // longer encodings are not supported  \n    \t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n                                }\n    \t\t\t}\n    \t\t}  \n\n                if (utf16 > 0xFFFF)   // 4 byte character - express as a surrogate pair\n                  {\n                     utf16 -= 0x10000;\n                     output += String.fromCharCode(0xD800 + (utf16 >> 10)); // lead character\n                     utf16 = 0xDC00 + (utf16 & 0x3FF);  // trail character\n                  }\n    \t\toutput += String.fromCharCode(utf16);\n    \t}\n    \treturn output;\n    }\n    \n    /** @ignore Repeat keepalive requests, monitor responses.*/\n    var Pinger = function(client, window, keepAliveInterval) { \n    \tthis._client = client;        \t\n     \tthis._window = window;\n     \tthis._keepAliveInterval = keepAliveInterval*1000;     \t\n        this.isReset = false;\n        \n        var pingReq = new WireMessage(MESSAGE_TYPE.PINGREQ).encode(); \n        \n        var doTimeout = function (pinger) {\n\t        return function () {\n\t            return doPing.apply(pinger);\n\t        };\n\t    };\n\t    \n\t    /** @ignore */\n        var doPing = function() { \n        \tif (!this.isReset) {\n        \t\tthis._client._trace(\"Pinger.doPing\", \"Timed out\");\n        \t\tthis._client._disconnected( ERROR.PING_TIMEOUT.code , format(ERROR.PING_TIMEOUT));\n        \t} else {\n        \t    this.isReset = false;\n        \t    this._client._trace(\"Pinger.doPing\", \"send PINGREQ\");\n                this._client.socket.send(pingReq); \n        \t    this.timeout = this._window.setTimeout(doTimeout(this), this._keepAliveInterval);\n            }\n        }\n\n        this.reset = function() {\n        \tthis.isReset = true;\n        \tthis._window.clearTimeout(this.timeout);\n        \tif (this._keepAliveInterval > 0)\n        \t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n        }\n\n        this.cancel = function() {\n        \tthis._window.clearTimeout(this.timeout);\n        }\n     }; \n\n\t/** @ignore Monitor request completion. */\n\tvar Timeout = function(client, window, timeoutSeconds, action, args) {\n\t\tthis._window = window;\n\t\tif (!timeoutSeconds)\n\t\t\ttimeoutSeconds = 30;\n\t\t\n\t\tvar doTimeout = function (action, client, args) {\n\t        return function () {\n\t            return action.apply(client, args);\n\t        };\n\t    };\n        this.timeout = setTimeout(doTimeout(action, client, args), timeoutSeconds * 1000);\n        \n\t\tthis.cancel = function() {\n\t\t\tthis._window.clearTimeout(this.timeout);\n\t\t}\n\t}; \n    \n    /*\n\t * Internal implementation of the Websockets MQTT V3.1 client.\n\t * \n\t * @name Messaging.ClientImpl @constructor \n\t * @param {String} host the DNS nameof the webSocket host. \n\t * @param {Number} port the port number for that host.\n\t * @param {String} clientId the MQ client identifier.\n\t */\n    var ClientImpl = function (host, port, clientId) {\n    \t// Check dependencies are satisfied in this browser.\n    \tif (!(\"WebSocket\" in global && global[\"WebSocket\"] !== null)) {\n            throw new Error(format(ERROR.UNSUPPORTED, [\"WebSocket\"]));\n \t    } \n        if (!(\"localStorage\" in global && global[\"localStorage\"] !== null)) {\n         \tthrow new Error(format(ERROR.UNSUPPORTED, [\"localStorage\"]));\n        }\n        if (!(\"ArrayBuffer\" in global && global[\"ArrayBuffer\"] !== null)) {\n         \tthrow new Error(format(ERROR.UNSUPPORTED, [\"ArrayBuffer\"]));\n        }\n    \t\n        this._trace(\"Messaging.Client\", host, port, clientId);\n\n        this.host = host;\n        this.port = port;\n        this.clientId = clientId;\n\n        // Local storagekeys are qualified with the following string.\n        this._localKey=host+\":\"+port+\":\"+clientId+\":\";\n\n        // Create private instance-only message queue\n        // Internal queue of messages to be sent, in sending order. \n        this._msg_queue = [];\n\n        // Messages we have sent and are expecting a response for, indexed by their respective message ids. \n        this._sentMessages = {};\n\n        // Messages we have received and acknowleged and are expecting a confirm message for\n        // indexed by their respective message ids. \n        this._receivedMessages = {};\n \n        // Internal list of callbacks to be executed when messages\n        // have been successfully sent over web socket, e.g. disconnect\n        // when it doesn't have to wait for ACK, just message is dispatched.\n        this._notify_msg_sent = {};\n\n        // Unique identifier for SEND messages, incrementing\n        // counter as messages are sent.\n        this._message_identifier = 1;\n        \n        // Used to determine the transmission sequence of stored sent messages.\n    \tthis._sequence = 0;\n    \t\n\n        // Load the local state, if any, from the saved version, only restore state relevant to this client.   \t\n        for(key in localStorage)\n        \tif (   key.indexOf(\"Sent:\"+this._localKey) == 0  \t\t    \n        \t    || key.indexOf(\"Received:\"+this._localKey) == 0)\n        \tthis.restore(key);\n    };\n\n    // Messaging Client public instance members. \n    ClientImpl.prototype.host;\n    ClientImpl.prototype.port;\n    ClientImpl.prototype.clientId;\n\n    // Messaging Client private instance members.\n    ClientImpl.prototype.socket;\n    /* true once we have received an acknowledgement to a CONNECT packet. */\n    ClientImpl.prototype.connected = false;\n    /* The largest message identifier allowed, may not be larger than 2**16 but \n     * if set smaller reduces the maximum number of outbound messages allowed.\n     */ \n    ClientImpl.prototype.maxMessageIdentifier = 65536;\n    ClientImpl.prototype.connectOptions;\n    ClientImpl.prototype.hostIndex;\n    ClientImpl.prototype.onConnectionLost;\n    ClientImpl.prototype.onMessageDelivered;\n    ClientImpl.prototype.onMessageArrived;\n    ClientImpl.prototype._msg_queue = null;\n    ClientImpl.prototype._connectTimeout;\n    /* The sendPinger monitors how long we allow before we send data to prove to the server that we are alive. */\n    ClientImpl.prototype.sendPinger = null;\n    /* The receivePinger monitors how long we allow before we require evidence that the server is alive. */\n    ClientImpl.prototype.receivePinger = null;\n    \n    ClientImpl.prototype._traceBuffer = null;\n    ClientImpl.prototype._MAX_TRACE_ENTRIES = 100;\n\n    ClientImpl.prototype.connect = function (connectOptions) {\n    \tvar connectOptionsMasked = this._traceMask(connectOptions, \"password\"); \n    \tthis._trace(\"Client.connect\", connectOptionsMasked, this.socket, this.connected);\n        \n    \tif (this.connected) \n        \tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n    \tif (this.socket)\n    \t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n        \n    \tthis.connectOptions = connectOptions;\n    \t\n    \tif (connectOptions.hosts) {\n    \t    this.hostIndex = 0;\n    \t    this._doConnect(connectOptions.hosts[0], connectOptions.ports[0]);  \n    \t} else {\n            this._doConnect(this.host, this.port);  \t\t\n    \t}\n        \n    };\n\n    ClientImpl.prototype.subscribe = function (filter, subscribeOptions) {\n    \tthis._trace(\"Client.subscribe\", filter, subscribeOptions);\n              \n    \tif (!this.connected)\n    \t    throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n    \t\n        var wireMessage = new WireMessage(MESSAGE_TYPE.SUBSCRIBE);\n        wireMessage.topics=[filter];\n        if (subscribeOptions.qos != undefined)\n        \twireMessage.requestedQos = [subscribeOptions.qos];\n        else \n        \twireMessage.requestedQos = [0];\n        \n        if (subscribeOptions.onSuccess) {\n            wireMessage.callback = function() {subscribeOptions.onSuccess({invocationContext:subscribeOptions.invocationContext});};\n        }\n        if (subscribeOptions.timeout) {\n        \twireMessage.timeOut = new Timeout(this, window, subscribeOptions.timeout, subscribeOptions.onFailure\n        \t\t\t, [{invocationContext:subscribeOptions.invocationContext, \n        \t\t\t\terrorCode:ERROR.SUBSCRIBE_TIMEOUT.code, \n        \t\t\t\terrorMessage:format(ERROR.SUBSCRIBE_TIMEOUT)}]);\n        }\n        \n        // All subscriptions return a SUBACK. \n        this._requires_ack(wireMessage);\n        this._schedule_message(wireMessage);\n    };\n\n    /** @ignore */\n    ClientImpl.prototype.unsubscribe = function(filter, unsubscribeOptions) {  \n    \tthis._trace(\"Client.unsubscribe\", filter, unsubscribeOptions);\n        \n    \tif (!this.connected)\n    \t   throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n    \t\n    \tvar wireMessage = new WireMessage(MESSAGE_TYPE.UNSUBSCRIBE);\n        wireMessage.topics = [filter];\n        \n        if (unsubscribeOptions.onSuccess) {\n        \twireMessage.callback = function() {unsubscribeOptions.onSuccess({invocationContext:unsubscribeOptions.invocationContext});};\n        }\n        if (unsubscribeOptions.timeout) {\n        \twireMessage.timeOut = new Timeout(this, window, unsubscribeOptions.timeout, unsubscribeOptions.onFailure\n        \t\t\t, [{invocationContext:unsubscribeOptions.invocationContext,\n        \t\t\t\terrorCode:ERROR.UNSUBSCRIBE_TIMEOUT.code,\n        \t\t\t\terrorMessage:format(ERROR.UNSUBSCRIBE_TIMEOUT)}]);\n        }\n     \n        // All unsubscribes return a SUBACK.         \n        this._requires_ack(wireMessage);\n        this._schedule_message(wireMessage);\n    };\n     \n    ClientImpl.prototype.send = function (message) {\n        this._trace(\"Client.send\", message);\n\n        if (!this.connected)\n           throw new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n        \n        wireMessage = new WireMessage(MESSAGE_TYPE.PUBLISH);\n        wireMessage.payloadMessage = message;\n        \n        if (message.qos > 0)\n            this._requires_ack(wireMessage);\n        else if (this.onMessageDelivered)\n        \tthis._notify_msg_sent[wireMessage] = this.onMessageDelivered(wireMessage.payloadMessage);\n        this._schedule_message(wireMessage);\n    };\n    \n    ClientImpl.prototype.disconnect = function () {\n        this._trace(\"Client.disconnect\");\n\n        if (!this.socket)\n    \t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connecting or connected\"]));\n        \n        wireMessage = new WireMessage(MESSAGE_TYPE.DISCONNECT);\n\n        // Run the disconnected call back as soon as the message has been sent,\n        // in case of a failure later on in the disconnect processing.\n        // as a consequence, the _disconected call back may be run several times.\n        this._notify_msg_sent[wireMessage] = scope(this._disconnected, this);\n\n        this._schedule_message(wireMessage);\n    };\n    \n   ClientImpl.prototype.getTraceLog = function () {\n        if ( this._traceBuffer !== null ) {\n            this._trace(\"Client.getTraceLog\", new Date());\n            this._trace(\"Client.getTraceLog in flight messages\", this._sentMessages.length);\n            for (key in this._sentMessages)\n                this._trace(\"_sentMessages \",key, this._sentMessages[key]);\n            for (key in this._receivedMessages)\n                this._trace(\"_receivedMessages \",key, this._receivedMessages[key]);\n\n            return this._traceBuffer;\n        }\n    };\n\n    ClientImpl.prototype.startTrace = function () {\n        if ( this._traceBuffer === null ) {\n            this._traceBuffer = [];\n        }\n        this._trace(\"Client.startTrace\", new Date(), version);\n    };\n\n    ClientImpl.prototype.stopTrace = function () {\n        delete this._traceBuffer;\n    };\n\n    ClientImpl.prototype._doConnect = function (host, port) { \t        \n        // When the socket is open, this client will send the CONNECT WireMessage using the saved parameters. \n        if (this.connectOptions.useSSL)\n          wsurl = [\"wss://\", host, \":\", port, \"/mqtt\"].join(\"\");\n        else\n          wsurl = [\"ws://\", host, \":\", port, \"/mqtt\"].join(\"\");\n        this.connected = false;\n        this.socket = new WebSocket(wsurl, 'mqttv3.1');\n        this.socket.binaryType = 'arraybuffer';\n        this.socket.onopen = scope(this._on_socket_open, this);\n        this.socket.onmessage = scope(this._on_socket_message, this);\n        this.socket.onerror = scope(this._on_socket_error, this);\n        this.socket.onclose = scope(this._on_socket_close, this);\n        \n        this.sendPinger = new Pinger(this, window, this.connectOptions.keepAliveInterval);\n        this.receivePinger = new Pinger(this, window, this.connectOptions.keepAliveInterval);\n        \n        this._connectTimeout = new Timeout(this, window, this.connectOptions.timeout, this._disconnected,  [ERROR.CONNECT_TIMEOUT.code, format(ERROR.CONNECT_TIMEOUT)]);\n    };\n\n    \n    // Schedule a new message to be sent over the WebSockets\n    // connection. CONNECT messages cause WebSocket connection\n    // to be started. All other messages are queued internally\n    // until this has happened. When WS connection starts, process\n    // all outstanding messages. \n    ClientImpl.prototype._schedule_message = function (message) {\n        this._msg_queue.push(message);\n        // Process outstanding messages in the queue if we have an  open socket, and have received CONNACK. \n        if (this.connected) {\n            this._process_queue();\n        }\n    };\n\n    ClientImpl.prototype.store = function(prefix, wireMessage) {\n    \tstoredMessage = {type:wireMessage.type, messageIdentifier:wireMessage.messageIdentifier, version:1};\n    \t\n    \tswitch(wireMessage.type) {\n\t      case MESSAGE_TYPE.PUBLISH:\n\t    \t  if(wireMessage.pubRecReceived)\n\t    \t\t  storedMessage.pubRecReceived = true;\n\t    \t  \n\t    \t  // Convert the payload to a hex string.\n\t    \t  storedMessage.payloadMessage = {};\n\t    \t  var hex = \"\";\n\t          var messageBytes = wireMessage.payloadMessage.payloadBytes;\n\t          for (var i=0; i<messageBytes.length; i++) {\n\t            if (messageBytes[i] <= 0xF)\n\t              hex = hex+\"0\"+messageBytes[i].toString(16);\n\t            else \n\t              hex = hex+messageBytes[i].toString(16);\n\t          }\n\t    \t  storedMessage.payloadMessage.payloadHex = hex;\n\t    \t  \n\t    \t  storedMessage.payloadMessage.qos = wireMessage.payloadMessage.qos;\n\t    \t  storedMessage.payloadMessage.destinationName = wireMessage.payloadMessage.destinationName;\n\t    \t  if (wireMessage.payloadMessage.duplicate) \n\t    \t\t  storedMessage.payloadMessage.duplicate = true;\n\t    \t  if (wireMessage.payloadMessage.retained) \n\t    \t\t  storedMessage.payloadMessage.retained = true;\t   \n\t    \t  \n\t    \t  // Add a sequence number to sent messages.\n\t    \t  if ( prefix.indexOf(\"Sent:\") == 0 ) {\n\t    \t\t  if ( wireMessage.sequence === undefined )\n\t    \t\t      wireMessage.sequence = ++this._sequence;\n\t    \t\t  storedMessage.sequence = wireMessage.sequence;\n\t    \t  }\n\t          break;    \n\t          \n\t        default:\n\t        \tthrow Error(format(ERROR.INVALID_STORED_DATA, [key, storedMessage]));\n  \t    }\n    \tlocalStorage.setItem(prefix+this._localKey+wireMessage.messageIdentifier, JSON.stringify(storedMessage));\n    };\n    \n    ClientImpl.prototype.restore = function(key) {    \t\n    \tvar value = localStorage.getItem(key);\n    \tvar storedMessage = JSON.parse(value);\n    \t\n    \tvar wireMessage = new WireMessage(storedMessage.type, storedMessage);\n    \t\n    \tswitch(storedMessage.type) {\n\t      case MESSAGE_TYPE.PUBLISH:\n\t    \t  // Replace the payload message with a Message object.\n\t    \t  var hex = storedMessage.payloadMessage.payloadHex;\n\t    \t  var buffer = new ArrayBuffer((hex.length)/2);\n              var byteStream = new Uint8Array(buffer); \n              var i = 0;\n              while (hex.length >= 2) { \n            \t  var x = parseInt(hex.substring(0, 2), 16);\n\t              hex = hex.substring(2, hex.length);\n\t              byteStream[i++] = x;\n\t          }\n              var payloadMessage = new Messaging.Message(byteStream);\n\t      \t  \n\t    \t  payloadMessage.qos = storedMessage.payloadMessage.qos;\n\t    \t  payloadMessage.destinationName = storedMessage.payloadMessage.destinationName;\n              if (storedMessage.payloadMessage.duplicate) \n\t    \t\t  payloadMessage.duplicate = true;\n\t    \t  if (storedMessage.payloadMessage.retained) \n\t    \t\t  payloadMessage.retained = true;\t \n\t    \t  wireMessage.payloadMessage = payloadMessage;\n              \n\t          break;    \n\t          \n\t        default:\n\t          throw Error(format(ERROR.INVALID_STORED_DATA, [key, value]));\n\t    }\n    \t    \t\t    \t\n    \tif (key.indexOf(\"Sent:\"+this._localKey) == 0) {      \n    \t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;    \t\t    \n    \t} else if (key.indexOf(\"Received:\"+this._localKey) == 0) {\n    \t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n    \t}\n    };\n    \n    ClientImpl.prototype._process_queue = function () {\n        var message = null;\n        // Process messages in order they were added\n        var fifo = this._msg_queue.reverse();\n\n        // Send all queued messages down socket connection\n        while ((message = fifo.pop())) {\n            this._socket_send(message);\n            // Notify listeners that message was successfully sent\n            if (this._notify_msg_sent[message]) {\n                this._notify_msg_sent[message]();\n                delete this._notify_msg_sent[message];\n            }\n        }\n    };\n\n    /**\n     * @ignore\n     * Expect an ACK response for this message. Add message to the set of in progress\n     * messages and set an unused identifier in this message.\n     */\n    ClientImpl.prototype._requires_ack = function (wireMessage) {\n    \tvar messageCount = Object.keys(this._sentMessages).length;\n        if (messageCount > this.maxMessageIdentifier)\n            throw Error (\"Too many messages:\"+messageCount);\n\n        while(this._sentMessages[this._message_identifier] !== undefined) {\n            this._message_identifier++;\n        }\n        wireMessage.messageIdentifier = this._message_identifier;\n        this._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n        if (wireMessage.type === MESSAGE_TYPE.PUBLISH) {\n        \tthis.store(\"Sent:\", wireMessage);\n        }\n        if (this._message_identifier === this.maxMessagIdentifier) {\n            this._message_identifier = 1;\n        }\n    };\n\n    /** \n     * @ignore\n     * Called when the underlying websocket has been opened.\n     */\n    ClientImpl.prototype._on_socket_open = function () {        \n        // Create the CONNECT message object.\n        var wireMessage = new WireMessage(MESSAGE_TYPE.CONNECT, this.connectOptions); \n        wireMessage.clientId = this.clientId;\n        this._socket_send(wireMessage);\n    };\n\n    /** \n     * @ignore\n     * Called when the underlying websocket has received a complete packet.\n     */\n    ClientImpl.prototype._on_socket_message = function (event) {\n        this._trace(\"Client._on_socket_message\", event.data);\n        \n        // Reset the receive ping timer, we now have evidence the server is alive.\n        this.receivePinger.reset();\n        var byteArray = new Uint8Array(event.data);\n        try {\n            var wireMessage = decodeMessage(byteArray);\n        } catch (error) {\n        \tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message]));\n        \treturn;\n        }\n        this._trace(\"Client._on_socket_message\", wireMessage);\n\n        switch(wireMessage.type) {\n            case MESSAGE_TYPE.CONNACK:\n            \tthis._connectTimeout.cancel();\n            \t\n            \t// If we have started using clean session then clear up the local state.\n            \tif (this.connectOptions.cleanSession) {\n    \t\t    \tfor (key in this._sentMessages) {\t    \t\t\n    \t\t    \t    var sentMessage = this._sentMessages[key];\n    \t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+sentMessage.messageIdentifier);\n    \t\t    \t}\n    \t\t\t\tthis._sentMessages = {};\n\n    \t\t\t\tfor (key in this._receivedMessages) {\n    \t\t\t\t\tvar receivedMessage = this._receivedMessages[key];\n    \t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+receivedMessage.messageIdentifier);\n    \t\t\t\t}\n    \t\t\t\tthis._receivedMessages = {};\n            \t}\n            \t// Client connected and ready for business.\n            \tif (wireMessage.returnCode === 0) {\n        \t        this.connected = true;\n        \t        // Jump to the end of the list of hosts and stop looking for a good host.\n        \t        if (this.connectOptions.hosts)\n        \t            this.hostIndex = this.connectOptions.hosts.length;\n                } else {\n                    this._disconnected(ERROR.CONNACK_RETURNCODE.code , format(ERROR.CONNACK_RETURNCODE, [wireMessage.returnCode, CONNACK_RC[wireMessage.returnCode]]));\n                    break;\n                }\n            \t\n        \t    // Resend messages.\n            \tvar sequencedMessages = new Array();\n            \tfor (var msgId in this._sentMessages) {\n            \t    if (this._sentMessages.hasOwnProperty(msgId))\n            \t        sequencedMessages.push(this._sentMessages[msgId]);\n            \t}\n          \n        \t    // Sort sentMessages into the original sent order.\n            \tvar sequencedMessages = sequencedMessages.sort(function(a,b) {return a.sequence - b.sequence;} );\n        \t    for (var i=0, len=sequencedMessages.length; i<len; i++) {\n        \t    \tvar sentMessage = sequencedMessages[i];\n        \t    \tif (sentMessage.type == MESSAGE_TYPE.PUBLISH && sentMessage.pubRecReceived) {\n        \t    \t    var pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:sentMessage.messageIdentifier});\n        \t            this._schedule_message(pubRelMessage);\n        \t    \t} else {\n        \t    \t\tthis._schedule_message(sentMessage);\n        \t    \t};\n        \t    }\n\n        \t    // Execute the connectOptions.onSuccess callback if there is one.\n        \t    if (this.connectOptions.onSuccess) {\n        \t        this.connectOptions.onSuccess({invocationContext:this.connectOptions.invocationContext});\n        \t    }\n\n        \t    // Process all queued messages now that the connection is established. \n        \t    this._process_queue();\n        \t    break;\n        \n            case MESSAGE_TYPE.PUBLISH:\n                this._receivePublish(wireMessage);\n                break;\n\n            case MESSAGE_TYPE.PUBACK:\n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                 // If this is a re flow of a PUBACK after we have restarted receivedMessage will not exist.\n            \tif (sentMessage) {\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                    localStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n                    if (this.onMessageDelivered)\n                    \tthis.onMessageDelivered(sentMessage.payloadMessage);\n                }\n            \tbreak;\n            \n            case MESSAGE_TYPE.PUBREC:\n                var sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                // If this is a re flow of a PUBREC after we have restarted receivedMessage will not exist.\n                if (sentMessage) {\n                \tsentMessage.pubRecReceived = true;\n                    var pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:wireMessage.messageIdentifier});\n                    this.store(\"Sent:\", sentMessage);\n                    this._schedule_message(pubRelMessage);\n                }\n                break;\n            \t            \t\n            case MESSAGE_TYPE.PUBREL:\n                var receivedMessage = this._receivedMessages[wireMessage.messageIdentifier];\n                localStorage.removeItem(\"Received:\"+this._localKey+wireMessage.messageIdentifier);\n                // If this is a re flow of a PUBREL after we have restarted receivedMessage will not exist.\n                if (receivedMessage) {\n                    this._receiveMessage(receivedMessage);\n                    delete this._receivedMessages[wireMessage.messageIdentifier];\n                }\n                // Always flow PubComp, we may have previously flowed PubComp but the server lost it and restarted.\n                pubCompMessage = new WireMessage(MESSAGE_TYPE.PUBCOMP, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubCompMessage);                    \n                    \n                \n                break;\n\n            case MESSAGE_TYPE.PUBCOMP: \n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n            \tdelete this._sentMessages[wireMessage.messageIdentifier];\n                localStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n                if (this.onMessageDelivered)\n                \tthis.onMessageDelivered(sentMessage.payloadMessage);\n                break;\n                \n            case MESSAGE_TYPE.SUBACK:\n                var sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                if (sentMessage) {\n                \tif(sentMessage.timeOut)\n                \t    sentMessage.timeOut.cancel();\n                    if (sentMessage.callback) {\n                        sentMessage.callback();\n                    }\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                }\n                break;\n        \t    \n            case MESSAGE_TYPE.UNSUBACK:\n            \tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n                if (sentMessage) { \n                \tif (sentMessage.timeOut)\n                        sentMessage.timeOut.cancel();\n                    if (sentMessage.callback) {\n                        sentMessage.callback();\n                    }\n                    delete this._sentMessages[wireMessage.messageIdentifier];\n                }\n\n                break;\n                \n            case MESSAGE_TYPE.PINGRESP:\n            \t/* The sendPinger or receivePinger may have sent a ping, the receivePinger has already been reset. */\n            \tthis.sendPinger.reset();\n            \tbreak;\n            \t\n            case MESSAGE_TYPE.DISCONNECT:\n            \t// Clients do not expect to receive disconnect packets.\n            \tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n            \tbreak;\n\n            default:\n            \tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n        }; \n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._on_socket_error = function (error) {\n    \tthis._disconnected(ERROR.SOCKET_ERROR.code , format(ERROR.SOCKET_ERROR, [error.data]));\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._on_socket_close = function () {\n        this._disconnected(ERROR.SOCKET_CLOSE.code , format(ERROR.SOCKET_CLOSE));\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._socket_send = function (wireMessage) {\n    \tif (wireMessage.type == 1) {\n    \t\tvar wireMessageMasked = this._traceMask(wireMessage, \"password\"); \n    \t\tthis._trace(\"Client._socket_send\", wireMessageMasked);\n    \t}\n    \telse this._trace(\"Client._socket_send\", wireMessage);\n        \n        this.socket.send(wireMessage.encode());\n        /* We have proved to the server we are alive. */\n        this.sendPinger.reset();\n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._receivePublish = function (wireMessage) {\n        switch(wireMessage.payloadMessage.qos) {\n            case \"undefined\":\n            case 0:\n                this._receiveMessage(wireMessage);\n                break;\n\n            case 1:\n                var pubAckMessage = new WireMessage(MESSAGE_TYPE.PUBACK, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubAckMessage);\n                this._receiveMessage(wireMessage);\n                break;\n\n            case 2:\n                this._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n                this.store(\"Received:\", wireMessage);\n                var pubRecMessage = new WireMessage(MESSAGE_TYPE.PUBREC, {messageIdentifier:wireMessage.messageIdentifier});\n                this._schedule_message(pubRecMessage);\n\n                break;\n\n            default:\n                throw Error(\"Invaild qos=\"+wireMmessage.payloadMessage.qos);\n        };\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._receiveMessage = function (wireMessage) {\n        if (this.onMessageArrived) {\n            this.onMessageArrived(wireMessage.payloadMessage);\n        }\n    };\n\n    /**\n     * @ignore\n     * Client has disconnected either at its own request or because the server\n     * or network disconnected it. Remove all non-durable state.\n     * @param {errorCode} [number] the error number.\n     * @param {errorText} [string] the error text.\n     */\n    ClientImpl.prototype._disconnected = function (errorCode, errorText) {\n    \tthis._trace(\"Client._disconnected\", errorCode, errorText);\n    \t\n    \tthis.sendPinger.cancel();\n    \tthis.receivePinger.cancel();\n    \tif (this._connectTimeout)\n    \t    this._connectTimeout.cancel();\n    \t// Clear message buffers.\n        this._msg_queue = [];\n        this._notify_msg_sent = {};\n       \n        if (this.socket) {\n            // Cancel all socket callbacks so that they cannot be driven again by this socket.\n            this.socket.onopen = null;\n            this.socket.onmessage = null;\n            this.socket.onerror = null;\n            this.socket.onclose = null;\n            if (this.socket.readyState === 1)\n                this.socket.close();\n            delete this.socket;           \n        }\n        \n        if (this.connectOptions.hosts && this.hostIndex < this.connectOptions.hosts.length-1) {\n        \t// Try the next host.\n        \tthis.hostIndex++;\n        \tthis._doConnect(this.connectOptions.hosts[this.hostIndex], this.connectOptions.ports[this.hostIndex]);\n        \n        } else {\n        \n            if (errorCode === undefined) {\n        \t    errorCode = ERROR.OK.code;\n        \t    errorText = format(ERROR.OK);\n            }\n        \t\n            // Run any application callbacks last as they may attempt to reconnect and hence create a new socket.\n            if (this.connected) {\n                this.connected = false;\n                // Execute the connectionLostCallback if there is one, and we were connected.       \n                if (this.onConnectionLost)\n            \t    this.onConnectionLost({errorCode:errorCode, errorMessage:errorText});      \t\n            } else {\n        \t    // Otherwise we never had a connection, so indicate that the connect has failed.\n                if(this.connectOptions.onFailure)\n            \t    this.connectOptions.onFailure({invocationContext:this.connectOptions.invocationContext, errorCode:errorCode, errorMessage:errorText});\n            }\n        }\n    };\n\n    /** @ignore */\n    ClientImpl.prototype._trace = function () {\n        if ( this._traceBuffer !== null ) {  \n            for (var i = 0, max = arguments.length; i < max; i++) {\n                if ( this._traceBuffer.length == this._MAX_TRACE_ENTRIES ) {    \n                    this._traceBuffer.shift();              \n                }\n                if (i === 0) this._traceBuffer.push(arguments[i]);\n                else if (typeof arguments[i] === \"undefined\" ) this._traceBuffer.push(arguments[i]);\n                else this._traceBuffer.push(\"  \"+JSON.stringify(arguments[i]));\n           };\n        };\n    };\n    \n    /** @ignore */\n    ClientImpl.prototype._traceMask = function (traceObject, masked) {\n        var traceObjectMasked = {};\n\t    for (var attr in traceObject) {\n\t        if (traceObject.hasOwnProperty(attr)) {\n\t        \tif (attr == masked) \n\t        \t\ttraceObjectMasked[attr] = \"******\";\n\t        \telse\n\t        \t\ttraceObjectMasked[attr] = traceObject[attr];\n\t        } \n\t    }\n\t    return traceObjectMasked;\n    };\n\n    // ------------------------------------------------------------------------\n    // Public Programming interface.\n    // ------------------------------------------------------------------------\n    \n    /** \n     * The JavaScript application communicates to the server using a Messaging.Client object. \n     * <p>\n     * Other programming languages,\n     * <a href=\"/clients/java/doc/javadoc/com/ibm/micro/client/mqttv3/MqttClient.html\"><big>Java</big></a>,\n     * <a href=\"/clients/c/doc/html/index.html\"><big>C</big></a>.\n     * <p>\n     * Most applications will create just one Client object and then call its connect() method,\n     * however applications can create more than one Client object if they wish. \n     * In this case the combination of host, port and clientId attributes must be different for each Client object.\n     * <p>\n     * The send, subscribe and unsubscribe methods are implemented as asynchronous JavaScript methods \n     * (even though the underlying protocol exchange might be synchronous in nature). \n     * This means they signal their completion by calling back to the application, \n     * via Success or Failure callback functions provided by the application on the method in question. \n     * Such callbacks are called at most once per method invocation and do not persist beyond the lifetime \n     * of the script that made the invocation.\n     * <p>\n     * In contrast there are some callback functions <i> most notably onMessageArrived</i> \n     * that are defined on the Messaging.Client object.  \n     * These may get called multiple times, and aren't directly related to specific method invocations made by the client. \n     *\n     * @name Messaging.Client    \n     * \n     * @constructor\n     * Creates a Messaging.Client object that can be used to communicate with a Messaging server.\n     *  \n     * @param {string} host the address of the messaging server, as a DNS name or dotted decimal IP address.\n     * @param {number} port the port number in the host to connect to.\n     * @param {string} clientId the Messaging client identifier, between 1 and 23 characters in length.\n     * \n     * @property {string} host <i>read only</i> the server's DNS hostname or dotted decimal IP address.\n     * @property {number} port <i>read only</i> the server's port.\n     * @property {string} clientId <i>read only</i> used when connecting to the server.\n     * @property {function} onConnectionLost called when a connection has been lost, \n     * after a connect() method has succeeded.\n     * Establish the call back used when a connection has been lost. The connection may be\n     * lost because the client initiates a disconnect or because the server or network \n     * cause the client to be disconnected. The disconnect call back may be called without \n     * the connectionComplete call back being invoked if, for example the client fails to \n     * connect.\n     * A single response object parameter is passed to the onConnectionLost callback containing the following fields:\n     * <ol>   \n     * <li>errorCode\n     * <li>errorMessage       \n     * </ol>\n     * @property {function} onMessageDelivered called when a message has been delivered. \n     * All processing that this Client will ever do has been completed. So, for example,\n     * in the case of a Qos=2 message sent by this client, the PubComp flow has been received from the server\n     * and the message has been removed from persistent storage before this callback is invoked. \n     * Parameters passed to the onMessageDelivered callback are:\n     * <ol>   \n     * <li>Messaging.Message that was delivered.\n     * </ol>    \n     * @property {function} onMessageArrived called when a message has arrived in this Messaging.client. \n     * Parameters passed to the onMessageArrived callback are:\n     * <ol>   \n     * <li>Messaging.Message that has arrived.\n     * </ol>    \n     */\n    var Client = function (host, port, clientId) {\n    \tif (typeof host !== \"string\")\n        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof host, \"host\"]));\n    \tif (typeof port !== \"number\" || port < 0)\n        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof port, \"port\"]));\n    \t\n    \tvar clientIdLength = 0;\n    \tfor (var i = 0; i<clientId.length; i++) {\n    \t\tvar charCode = clientId.charCodeAt(i);                   \n    \t\tif (0xD800 <= charCode && charCode <= 0xDBFF)  {    \t\t\t\n                 i++; // Surrogate pair.\n            }   \t\t   \n    \t\tclientIdLength++;\n    \t}     \t   \t\n        if (typeof clientId !== \"string\" || clientIdLength < 1 | clientIdLength > 23)\n        \tthrow new Error(format(ERROR.INVALID_ARGUMENT, [clientId, \"clientId\"])); \n    \t\n        var client = new ClientImpl(host, port, clientId);\n        this._getHost =  function() { return client.host; };\n    \tthis._setHost = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n         \t\n        this._getPort = function() { return client.port; };\n    \tthis._setPort = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n    \t\n    \tthis._getClientId = function() { return client.clientId; };\n    \tthis._setClientId = function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); };\n        \n        this._getOnConnectionLost = function() { return client.onConnectionLost; };\n        this._setOnConnectionLost = function(newOnConnectionLost) { \n            if (typeof newOnConnectionLost === \"function\")\n            \tclient.onConnectionLost = newOnConnectionLost;\n            else \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnectionLost, \"onConnectionLost\"]));\n        };\n\n        this._getOnMessageDelivered = function() { return client.onMessageDelivered; };\n    \tthis._setOnMessageDelivered = function(newOnMessageDelivered) { \n    \t\tif (typeof newOnMessageDelivered === \"function\")\n    \t\t\tclient.onMessageDelivered = newOnMessageDelivered;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageDelivered, \"onMessageDelivered\"]));\n    \t};\n       \n        this._getOnMessageArrived = function() { return client.onMessageArrived; };\n    \tthis._setOnMessageArrived = function(newOnMessageArrived) { \n    \t\tif (typeof newOnMessageArrived === \"function\")\n    \t\t\tclient.onMessageArrived = newOnMessageArrived;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageArrived, \"onMessageArrived\"]));\n    \t};\n        \n        /** \n         * Connect this Messaging client to its server. \n         * \n         * @name Messaging.Client#connect\n         * @function\n         * @param {Object} [connectOptions] attributes used with the connection. \n         * <p>\n         * Properties of the connect options are: \n         * @config {number} [timeout] If the connect has not succeeded within this number of seconds, it is deemed to have failed.\n         *                            The default is 30 seconds.\n         * @config {string} [userName] Authentication username for this connection.\n         * @config {string} [password] Authentication password for this connection.\n         * @config {Messaging.Message} [willMessage] sent by the server when the client disconnects abnormally.\n         * @config {Number} [keepAliveInterval] the server disconnects this client if there is no activity for this\n         *                number of seconds. The default value of 60 seconds is assumed if not set.\n         * @config {boolean} [cleanSession] if true(default) the client and server persistent state is deleted on successful connect.\n         * @config {boolean} [useSSL] if present and true, use an SSL Websocket connection.\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the connect acknowledgement has been received from the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext as passed in to the onSuccess method in the connectOptions.       \n         * </ol>\n         * @config {function} [onFailure] called when the connect request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext as passed in to the onFailure method in the connectOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {Array} [hosts] If present this set of hostnames is tried in order in place \n         * of the host and port paramater on the construtor. The hosts and the matching ports are tried one at at time in order until\n         * one of then succeeds.\n         * @config {Array} [ports] If present this set of ports matching the hosts.\n         * @throws {InvalidState} if the client is not in disconnected state. The client must have received connectionLost\n         * or disconnected before calling connect for a second or subsequent time.\n         */\n        this.connect = function (connectOptions) {\n        \tconnectOptions = connectOptions || {} ;\n        \tvalidate(connectOptions,  {timeout:\"number\",\n        \t\t\t                   userName:\"string\", \n        \t\t                       password:\"string\", \n        \t\t                       willMessage:\"object\", \n        \t\t                       keepAliveInterval:\"number\", \n        \t\t                       cleanSession:\"boolean\", \n        \t\t                       useSSL:\"boolean\",\n        \t\t                       invocationContext:\"object\", \n      \t\t                           onSuccess:\"function\", \n      \t\t                           onFailure:\"function\",\n      \t\t                           hosts:\"object\",\n      \t\t                           ports:\"object\"});\n        \t\n        \t// If no keep alive interval is set, assume 60 seconds.\n            if (connectOptions.keepAliveInterval === undefined)\n            \tconnectOptions.keepAliveInterval = 60;\n\n        \tif (connectOptions.willMessage) {\n                if (!(connectOptions.willMessage instanceof Message))\n            \t    throw new Error(format(ERROR.INVALID_TYPE, [connectOptions.willMessage, \"connectOptions.willMessage\"]));\n                // The will message must have a payload that can be represented as a string.\n                // Cause the willMessage to throw an exception if this is not the case.\n            \tconnectOptions.willMessage.stringPayload;\n            \t\n            \tif (typeof connectOptions.willMessage.destinationName === \"undefined\")\n                \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.willMessage.destinationName, \"connectOptions.willMessage.destinationName\"]));\n        \t}\n        \tif (typeof connectOptions.cleanSession === \"undefined\")\n        \t\tconnectOptions.cleanSession = true;\n        \tif (connectOptions.hosts) {\n        \t\tif (!connectOptions.ports)\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tif (!(connectOptions.hosts instanceof Array) )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n        \t\tif (!(connectOptions.ports instanceof Array) )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tif (connectOptions.hosts.length <1 )\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n        \t\tif (connectOptions.hosts.length != connectOptions.ports.length)\n        \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n        \t\tfor (var i = 0; i<connectOptions.hosts.length; i++) {\n        \t\t\tif (typeof connectOptions.hosts[i] !== \"string\")\n        \t        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.hosts[i], \"connectOptions.hosts[\"+i+\"]\"]));\n        \t\t\tif (typeof connectOptions.ports[i] !== \"number\" || connectOptions.ports[i] < 0)\n        \t        \tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.ports[i], \"connectOptions.ports[\"+i+\"]\"]));\n        \t    }\n        \t}\n\n        \tclient.connect(connectOptions);\n        };\n     \n        /** \n         * Subscribe for messages, request receipt of a copy of messages sent to the destinations described by the filter.\n         * \n         * @name Messaging.Client#subscribe\n         * @function\n         * @param {string} filter describing the destinations to receive messages from.\n         * <br>\n         * @param {object} [subscribeOptions] used to control the subscription, as follows:\n         * <p>\n         * @config {number} [qos] the maiximum qos of any publications sent as a result of making this subscription.\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the subscribe acknowledgement has been received from the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the subscribeOptions.       \n         * </ol>\n         * @config {function} [onFailure] called when the subscribe request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the subscribeOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {number} [timeout] which if present determines the number of seconds after which the onFailure calback is called\n         * the presence of a timeout does not prevent the onSuccess callback from being called when the MQTT Suback is eventually received.         \n    \t * @throws {InvalidState} if the client is not in connected state.\n         */\n        this.subscribe = function (filter, subscribeOptions) {\n        \tif (typeof filter !== \"string\")\n        \t\tthrow new Error(\"Invalid argument:\"+filter);\n        \tsubscribeOptions = subscribeOptions || {} ;\n        \tvalidate(subscribeOptions,  {qos:\"number\", \n        \t\t                         invocationContext:\"object\", \n        \t\t                         onSuccess:\"function\", \n        \t\t                         onFailure:\"function\",\n        \t\t                         timeout:\"number\"\n        \t\t                        });\n        \tif (subscribeOptions.timeout && !subscribeOptions.onFailure)\n        \t\tthrow new Error(\"subscribeOptions.timeout specified with no onFailure callback.\");\n        \tif (typeof subscribeOptions.qos !== \"undefined\" \n        \t\t&& !(subscribeOptions.qos === 0 || subscribeOptions.qos === 1 || subscribeOptions.qos === 2 ))\n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [subscribeOptions.qos, \"subscribeOptions.qos\"]));\n            client.subscribe(filter, subscribeOptions);\n        };\n\n        /**\n         * Unsubscribe for messages, stop receiving messages sent to destinations described by the filter.\n         * \n         * @name Messaging.Client#unsubscribe\n         * @function\n         * @param {string} filter describing the destinations to receive messages from.\n         * @param {object} [unsubscribeOptions] used to control the subscription, as follows:\n         * <p>\n         * @config {object} [invocationContext] passed to the onSuccess callback or onFailure callback.\n         * @config {function} [onSuccess] called when the unsubscribe acknowledgement has been receive dfrom the server.\n         * A single response object parameter is passed to the onSuccess callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the unsubscribeOptions.     \n         * </ol>\n         * @config {function} [onFailure] called when the unsubscribe request has failed or timed out.\n         * A single response object parameter is passed to the onFailure callback containing the following fields:\n         * <ol>\n         * <li>invocationContext if set in the unsubscribeOptions.       \n         * <li>errorCode a number indicating the nature of the error.\n         * <li>errorMessage text describing the error.      \n         * </ol>\n         * @config {number} [timeout] which if present determines the number of seconds after which the onFailure callback is called, the\n         * presence of a timeout does not prevent the onSuccess callback from being called when the MQTT UnSuback is eventually received.\n         * @throws {InvalidState} if the client is not in connected state.\n         */\n        this.unsubscribe = function (filter, unsubscribeOptions) {\n        \tif (typeof filter !== \"string\")\n        \t\tthrow new Error(\"Invalid argument:\"+filter);\n        \tunsubscribeOptions = unsubscribeOptions || {} ;\n        \tvalidate(unsubscribeOptions,  {invocationContext:\"object\", \n        \t\t                           onSuccess:\"function\", \n        \t\t                           onFailure:\"function\",\n        \t\t                           timeout:\"number\"\n        \t\t                          });\n        \tif (unsubscribeOptions.timeout && !unsubscribeOptions.onFailure)\n        \t\tthrow new Error(\"unsubscribeOptions.timeout specified with no onFailure callback.\");\n            client.unsubscribe(filter, unsubscribeOptions);\n        };\n\n        /**\n         * Send a message to the consumers of the destination in the Message.\n         * \n         * @name Messaging.Client#send\n         * @function \n         * @param {Messaging.Message} message to send.\n         \n         * @throws {InvalidState} if the client is not in connected state.\n         */   \n        this.send = function (message) {       \t\n            if (!(message instanceof Message))\n                throw new Error(\"Invalid argument:\"+typeof message);\n            if (typeof message.destinationName === \"undefined\")\n            \tthrow new Error(\"Invalid parameter Message.destinationName:\"+message.destinationName);\n           \n            client.send(message);   \n        };\n        \n        /** \n         * Normal disconnect of this Messaging client from its server.\n         * \n         * @name Messaging.Client#disconnect\n         * @function\n         * @throws {InvalidState} if the client is not in connected or connecting state.     \n         */\n        this.disconnect = function () {\n        \tclient.disconnect();\n        };\n        \n        /** \n         * Get the contents of the trace log.\n         * \n         * @name Messaging.Client#getTraceLog\n         * @function\n         * @return {Object[]} tracebuffer containing the time ordered trace records.\n         */\n        this.getTraceLog = function () {\n        \treturn client.getTraceLog();\n        }\n        \n        /** \n         * Start tracing.\n         * \n         * @name Messaging.Client#startTrace\n         * @function\n         */\n        this.startTrace = function () {\n        \tclient.startTrace();\n        };\n        \n        /** \n         * Stop tracing.\n         * \n         * @name Messaging.Client#stopTrace\n         * @function\n         */\n        this.stopTrace = function () {\n            client.stopTrace();\n        };\n    };\n\n    Client.prototype = {\n        get host() { return this._getHost(); },\n        set host(newHost) { this._setHost(newHost); },\n        \t\n        get port() { return this._getPort(); },\n        set port(newPort) { this._setPort(newPort); },\n        \t\n        get clientId() { return this._getClientId(); },\n        set clientId(newClientId) { this._setClientId(newClientId); },\n\n        get onConnectionLost() { return this._getOnConnectionLost(); },\n        set onConnectionLost(newOnConnectionLost) { this._setOnConnectionLost(newOnConnectionLost); },\n\n        get onMessageDelivered() { return this._getOnMessageDelivered(); },\n        set onMessageDelivered(newOnMessageDelivered) { this._setOnMessageDelivered(newOnMessageDelivered); },\n        \n        get onMessageArrived() { return this._getOnMessageArrived(); },\n        set onMessageArrived(newOnMessageArrived) { this._setOnMessageArrived(newOnMessageArrived); }\n    };\n    \n    /** \n     * An application message, sent or received.\n     * <p>\n     * Other programming languages,\n     * <a href=\"/clients/java/doc/javadoc/com/ibm/micro/client/mqttv3/MqttMessage.html\"><big>Java</big></a>,\n     * <a href=\"/clients/c/doc/html/struct_m_q_t_t_client__message.html\"><big>C</big></a>.\n     * <p>\n     * All attributes may be null, which implies the default values.\n     * \n     * @name Messaging.Message\n     * @constructor\n     * @param {String|ArrayBuffer} payload The message data to be sent.\n     * <p>\n     * @property {string} payloadString <i>read only</i> The payload as a string if the payload consists of valid UTF-8 characters.\n     * @property {ArrayBuffer} payloadBytes <i>read only</i> The payload as an ArrayBuffer.\n     * <p>\n     * @property {string} destinationName <b>mandatory</b> The name of the destination to which the message is to be sent\n     *                    (for messages about to be sent) or the name of the destination from which the message has been received.\n     *                    (for messages received by the onMessage function).\n     * <p>\n     * @property {number} qos The Quality of Service used to deliver the message.\n     * <dl>\n     *     <dt>0 Best effort (default).\n     *     <dt>1 At least once.\n     *     <dt>2 Exactly once.     \n     * </dl>\n     * <p>\n     * @property {Boolean} retained If true, the message is to be retained by the server and delivered \n   \t *                     to both current and future subscriptions.\n   \t *                     If false the server only delivers the message to current subscribers, this is the default for new Messages. \n   \t *                     A received message has the retained boolean set to true if the message was published \n   \t *                     with the retained boolean set to true\n   \t *                     and the subscrption was made after the message has been published. \n   \t * <p>\n     * @property {Boolean} duplicate <i>read only</i> If true, this message might be a duplicate of one which has already been received. \n     *                     This is only set on messages received from the server.\n     *                     \n     */\n    var Message = function (newPayload) {  \n    \tvar payload;\n    \tif (   typeof newPayload === \"string\" \n    \t\t|| newPayload instanceof ArrayBuffer\n    \t\t|| newPayload instanceof Int8Array\n    \t\t|| newPayload instanceof Uint8Array\n    \t\t|| newPayload instanceof Int16Array\n    \t\t|| newPayload instanceof Uint16Array\n    \t\t|| newPayload instanceof Int32Array\n    \t\t|| newPayload instanceof Uint32Array\n    \t\t|| newPayload instanceof Float32Array\n    \t\t|| newPayload instanceof Float64Array\n    \t   ) {\n            payload = newPayload;\n        } else {\n            throw (format(ERROR.INVALID_ARGUMENT, [newPayload, \"newPayload\"]));\n        }\n\n    \tthis._getPayloadString = function () {\n    \t\tif (typeof payload === \"string\")\n       \t\t\treturn payload;\n       \t\telse\n       \t\t\treturn parseUTF8(payload, 0, payload.length); \n    \t};\n\n    \tthis._getPayloadBytes = function() {\n    \t\tif (typeof payload === \"string\") {\n    \t\t\tvar buffer = new ArrayBuffer(UTF8Length(payload));\n    \t\t\tvar byteStream = new Uint8Array(buffer); \n    \t\t\tstringToUTF8(payload, byteStream, 0);\n\n    \t\t\treturn byteStream;\n    \t\t} else {\n    \t\t\treturn payload;\n    \t\t};\n    \t};\n\n    \tvar destinationName = undefined;\n    \tthis._getDestinationName = function() { return destinationName; };\n    \tthis._setDestinationName = function(newDestinationName) { \n    \t\tif (typeof newDestinationName === \"string\")\n    \t\t    destinationName = newDestinationName;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newDestinationName, \"newDestinationName\"]));\n    \t};\n    \t    \t\n    \tvar qos = 0;\n    \tthis._getQos = function() { return qos; };\n    \tthis._setQos = function(newQos) { \n    \t\tif (newQos === 0 || newQos === 1 || newQos === 2 )\n    \t\t\tqos = newQos;\n    \t\telse \n    \t\t\tthrow new Error(\"Invalid argument:\"+newQos);\n    \t};\n\n    \tvar retained = false;\n    \tthis._getRetained = function() { return retained; };\n    \tthis._setRetained = function(newRetained) { \n    \t\tif (typeof newRetained === \"boolean\")\n    \t\t    retained = newRetained;\n    \t\telse \n    \t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newRetained, \"newRetained\"]));\n    \t};\n    \t\n    \tvar duplicate = false;\n    \tthis._getDuplicate = function() { return duplicate; };\n    \tthis._setDuplicate = function(newDuplicate) { duplicate = newDuplicate; };\n    };\n    \n    Message.prototype = {\n    \tget payloadString() { return this._getPayloadString(); },\n    \tget payloadBytes() { return this._getPayloadBytes(); },\n    \t\n    \tget destinationName() { return this._getDestinationName(); },\n    \tset destinationName(newDestinationName) { this._setDestinationName(newDestinationName); },\n    \t\n    \tget qos() { return this._getQos(); },\n    \tset qos(newQos) { this._setQos(newQos); },\n\n    \tget retained() { return this._getRetained(); },\n    \tset retained(newRetained) { this._setRetained(newRetained); },\n\n    \tget duplicate() { return this._getDuplicate(); },\n    \tset duplicate(newDuplicate) { this._setDuplicate(newDuplicate); }\n    };\n       \n    // Module contents.\n    return {\n        Client: Client,\n        Message: Message\n    };\n})(window);"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/order.js",
    "content": "/**\n * Created by 文辉 on 2017/7/25.\n */\n$(document).ready(function () {\n    $(\"#confirm-orders\").click(function () {\n        // alert(\"safd\");\n        var selectAddr =  $('input:radio[name=\"addressid\"]:checked').val();\n        if(selectAddr == null) {\n            swal(\"请先添加地址\");\n            return;\n        }\n        var isPay = $('#pay-select').val();\n        var oldPrice = $('#total-old').text();\n        var newPrice = $('#total-new').text();\n        $.ajax({\n            url: \"/shop/orderFinish\",\n            type: \"POST\",\n            data: {\n                oldPrice: oldPrice,\n                newPrice: newPrice,\n                isPay: isPay,\n                addressid: selectAddr\n            },\n            success: function () {\n                swal(\"购买成功\", \"\", \"success\");\n                location.href = \"/shop/info/list\"\n            },\n            error: function () {\n                swal(\"购买失败，无法连接到服务器！\");\n            }\n        });\n    });\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/send.js",
    "content": "var client;\nvar clientID;\n$(window).on('beforeunload', function () {\n    client = null;\n    window.opener.document.getElementById(\"flag\").value = \"0\";\n});\n$(document).ready(function () {\n\n    console.log(getChatList(2));\n    reGetChatUser($(\"#receiveId\").text());\n\n    clientID = $('#sendId').text();\n    client = new Messaging.Client('127.0.0.1', 61614, clientID);\n    client.onConnectionLost = function () {\n        alert(\"连接已断开\");\n    };\n    //收到消息\n    client.onMessageArrived = function (message) {\n        clientID = $('#sendId').text();\n        var userid = $(\"#receiveId\").text();\n        var msgObj = jQuery.parseJSON(message.payloadString);\n        // $('#toID').val(msgObj.from);\n        // debugger\n        if (msgObj.to === clientID && msgObj.from === userid) {\n            // debugger;\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + msgObj.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n            /*$('#message').append(\"<font color=red>\"+msgObj.from+\":\"+msgObj.body+\"</font></br>\");*/\n        } else if (msgObj.to === clientID && !getChatList(msgObj.from)) {\n            //重新获取聊天列表\n            reGetChatUser(msgObj.from);\n            // reGetChatUser(null);\n           /* var chatlistitem = '<a class=\"a-card\" data-userid=\"' + msgObj.from + '\"> <div class=\"card\">' + msgObj.from + '</div> </a>';\n            $('.a-far').prepend(chatlistitem);*/\n        }\n    };\n    //建立连接和订阅\n    client.connect({\n        onSuccess: function () {\n            //订阅topic\n            client.subscribe(\"topic\");\n            // alert(\"连接成功\");\n        }\n    });\n    //var loadMessage = setInterval(receive,1000);\n    //var loadList = setInterval(refreshList,1000);\n    //receive();\n    // refreshList();\n    //点击发送按钮\n    $(\"#send-message\").click(function () {\n\n        var message = $(\"#input-message\").val();\n        if (message !== '') {\n\n            clientID = $('#sendId').text();\n            var msg = {};\n            msg.from = clientID;\n            msg.to = $('#receiveId').text();\n            msg.body = message;\n            message = new Messaging.Message(JSON.stringify(msg));\n            message.destinationName = \"topic\";\n            client.send(message);\n\n            $(\"#input-message\").val('');\n            var element = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2  animated slideInRight\"><div class=\"info-content\"> ' + msg.body + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n\n\n            //始终保持滚动条滚动到最下方\n            $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n            $.ajax({\n                url: \"/shop/sendMessage/\", //把表单数据发送到ajax.jsp\n                type: \"POST\",\n                data: {\n                    senduser: clientID,\n                    receiveuser: msg.to,\n                    msgcontent: msg.body\n                },\n                error: function (request) {\n                    alert(\"保存消息失败\");\n                },\n                success: function (data) {\n                    // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n                }\n            });\n            var receive = $(\"#receiveId\").text();\n            /*$.post(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             });\n             receive();\n             refreshList();*/\n            /*$.get(\"servlet/ChatServlet\", {\n             message: message,\n             time: new Date(),\n             receiveId: receive\n             },\n             function(data,status){\n             alert(\"数据: \\n\" + data + \"\\n状态: \" + status);\n             });*/\n        }\n    });\n\n    //回车\n    $(document).keypress(function (e) {\n        if (e.which == 13) {\n            e.preventDefault();\n            jQuery(\"#send-message\").click();\n        }\n    });\n\n    $('.a-card').click(function () {\n        $('.a-card').css(\"background\", \"#FFFFFF\")\n        $(this).css(\"background\", \"#F8F8F8\");\n        var userid = $(this).attr(\"data-userid\");\n        var username = $(this).children(\".card\").text();\n        $(\"#receive\").text(username);\n        $(\"#receiveId\").text(userid);\n\n        //发异步请求查聊天消息\n        $.ajax({\n            url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n            type: \"POST\",\n            data: {\n                senduser: $(\"#sendId\").text(),\n                receiveuser: userid,\n            },\n            error: function (request) {\n                alert(\"保存消息失败\");\n            },\n            success: function (result) {\n                $('.chat-content-body').empty();\n                showMessage(result.info.message);\n                // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n            }\n        });\n    });\n    /*function hitList(){\n     $('.list-item').css(\"background\",\"#FAFAFA\");\n     $(this).css(\"background\",\"#EBEBEC\");\n     var name = $(this).children(\"#user-name\").text();\n     var number = $(this).children(\"#user-no\").text();\n     $(\"#receive\").text(name);\n     $(\"#receiveId\").text(number);\n\n     }*/\n\n    $('.chat-list').hover(function () {\n        $(this).css(\"overflow-y\", \"auto\");\n    }, function () {\n        $(this).css(\"overflow-y\", \"hidden\");\n    });\n    //refreshList();\n\n});\n\nfunction userListClick() {\n\n    //发异步请求查聊天消息\n    $.ajax({\n        url: \"/shop/getMessage/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            senduser: $(\"#sendId\").text(),\n            receiveuser: $(\"#receiveId\").text(),\n        },\n        error: function (request) {\n            alert(\"保存消息失败\");\n        },\n        success: function (result) {\n            $('.chat-content-body').empty();\n            showMessage(result.info.message);\n            // alert(\"success!\"); //将返回的结果显示到ajaxDiv中\n        }\n    });\n}\n\n/*function receive(){\n var sendUser = $('#receiveId').text();\n $.post(\"servlet/ReceiveServlet\", {\n sendId: sendUser,\n },\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n $(\".chat-content-body\").html('');\n for (var i = 0; i < data.length; i++) {\n showMessage(data[i].User1,data[i].MsgContent);\n }\n },\"json\");\n }*/\n\n\nfunction showMessage(message) {\n    // $(\"#input-message\").val('');\n    var receiveId = $('#receiveId').text();\n\n    $.each(message, function (index, item) {\n        if (item.senduser == receiveId) {\n            var element = '<div class=\"chat-message1 chat-message\"> <div class=\"chat-message-content1\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element, element_float);\n        } else {\n            var element1 = '<div class=\"chat-message2 chat-message\"> <div class=\"chat-message-content2\"><div class=\"info-content\"> ' + item.msgcontent + '</div> </div> </div>';\n            var element_float1 = '<div class=\"clear-float\"></div>';\n            $(\".chat-content-body\").append(element1, element_float1);\n        }\n    });\n\n    //始终保持滚动条滚动到最下方\n    $(\".chat-content\").scrollTop($(\".chat-content\")[0].scrollHeight);\n\n}\n\n//获取所有聊天列表\nfunction getChatList(id) {\n    var chatList = [];\n    $('.a-far>a').each(function () {\n        chatList.push($(this).attr(\"data-userid\"));\n    });\n    console.log(chatList);\n    for (var i = 0; i < chatList.length; i++) {\n        if (chatList[i] == id) {\n            return true;\n        }\n    }\n    return false;\n\n    /*$('.a-far').children().each(function(index,item){\n     alert(item.attr(\"data-userid\"));\n     })*/\n\n}\n\n//重新获取列表\nfunction reGetChatUser(sendto) {\n    $.ajax({\n        url: \"/shop/chatto/\", //把表单数据发送到ajax.jsp\n        type: \"POST\",\n        data: {\n            sendto: sendto\n        },\n        error: function (request) {\n            alert(result.msg);\n        },\n        success: function (result) {\n            $('.a-far').empty();\n            showChatList(result.info.userlist);\n        }\n    });\n}\n\nfunction showChatList(userlist) {\n    $.each(userlist, function (index, item) {\n        var chatlistitemA = $(\"<a></a>\").addClass(\"a-card\").attr(\"data-userid\", item.userid).attr(\"data-username\", item.username);\n        var chatlistitem = chatlistitemA.addClass(\"card\").append(item.username);\n        chatlistitemA.click(function () {\n            $('.a-card').css(\"background\", \"#FFFFFF\")\n            $(this).css(\"background\", \"#F8F8F8\");\n            var userid = $(this).attr(\"data-userid\");\n            // var username = $(this).children(\".card\").text();\n            var username = $(this).attr(\"data-username\");\n            $(\"#receive\").text(username);\n            $(\"#receiveId\").text(userid);\n            userListClick();\n        });\n\n        /* <div class=\"card\">' + item.username + '</div>\n        *!/*/\n        $('.a-far').prepend(chatlistitem);\n    });\n}\n\n\n/*\n function refreshList() {\n $.post(\"servlet/RefreshServlet\",\n function(data, status){\n //alert(JSON.stringify(data));\n // alert(typeof(data));\n //var arr = eval(data);\n //console.log(data.MsgContent);\n //alert(data);\n //$(\".chat-list\").html('');\n for (var i = 0; i < data.length; i++) {\n // showList(data[i].UserId,data[i].Name);\n $('#list-item'+i).children(\"#user-name\").text(data[i].Name);\n $('#list-item'+i).children(\"#user-no\").text(data[i].UserId);\n $('#list-item'+i).css(\"display\",\"block\");\n }\n },\"json\");\n }\n\n function showList(id,name) {\n var item = '<div class=\"list-item\"><h3 id=\"user-name\">'+name+'</h3><span id=\"user-no\">'+id+'</span></div>';\n $('.chat-list').append(item);\n }*/\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/shopcart.js",
    "content": "/*\n$(document).ready(function(){\n\t$('.delete-goods').click(function(){\n\t\tvar goodsid = $(this).attr(\"data-goodsid\");\n        alert(\"asfd\");\n\t\t// deleteGoods(goodsid);\n\t});\n\n\t$('.confirm-orders').click(function(){\n\t\tconfirmOrders();\n\t\talert(\"已成功加入订单，并已发送邮件至卖家，请等待卖家回复！\");\n\t\tlocation.href = \"/index.jsp\";\n\t});\n});*/\n/*\nfunction deleteGoods(goodsid){\n\t$.post(\"servlet/DeleteCartServlet\", { \n\t\tgoodsId: goodsid,\n\t});\n}\n\nfunction confirmOrders(){\n\t$.post(\"servlet/SaleServlet\");\n}*/\n$(document).ready(function () {\n    var path = $(\"#path\").text();\n    showcart();\n\n    /*$('.delete-goods').click(function(){\n        alert(\"adf\");\n        var goodsid = $(this).attr(\"data-goodsid\");\n        $.ajax({\n            url: \"/shop/deleteCart\" + goodsid,\n            type: \"DELETE\",\n            success:function (result) {\n                swal(result.msg, \"\",\"success\");\n                showcart();\n            },\n            error:function () {\n                /!*to_page('/shop',currentPage);*!/\n                swal(\"删除失败\");\n            }\n        })\n    });*/\n});\n\n/*$(document).on(\"click\",\".delete-good\",function () {\n    alert(\"afd\");\n});*/\n\nfunction deleteCartGoods(goodsid) {\n    $.ajax({\n        url: \"/shop/deleteCart/\" + goodsid,\n        type: \"DELETE\",\n        success: function (result) {\n            // swal(result.msg, \"\",\"success\");\n            showcart();\n        },\n        error:function () {\n            swal(\"删除失败\");\n        }\n    })\n}\n\n//改变商品数量更新购物车\nfunction updateCart(goodsid, newNum) {\n    //获取当前数量\n    // var newNum = $(\".num\").val();\n    $.ajax({\n        url: \"/shop/update\",\n        data: {\n            goodsid: goodsid,\n            num:newNum\n        },\n        method: \"post\",\n        success: function (result) {\n            // swal(result.msg, \"\", \"success\");\n            showcart();\n        },\n        error: function (result) {\n            swal(\"更新购物车失败\");\n        }\n    });\n}\n\nfunction showcart() {\n    $.ajax({\n        url: \"/shop\" + \"/cartjson\",\n        type: \"post\",\n        success: function (result) {\n            //显示购物车\n            build_cart_table(result);\n        },\n        error: function (result) {\n            swal(\"获取购物车失败\");\n        }\n    });\n}\n\nfunction build_cart_table(result) {\n    $(\"#cart-table tbody\").empty();\n    var goods = result.info.shopcart;\n    var totalnum = 0;\n    var totalMoney = 0;\n\n    if(goods.length === 0) {\n        var spareTd = $('<tr> <td colspan=\"6\"> <div class=\"coupon\" style=\"margin-left:37%;\">购物车还是空的，快去<a href=\"/shop/main\" style=\"color:red;\">首页</a>看看吧！ </div> </td> </tr>');\n        spareTd.appendTo(\"#cart-table tbody\");\n    } else {\n        $.each(goods, function (index,item) {\n\n            var delA = $(\"<a></a>\").addClass(\"delete-goods\").attr(\"data-goodsid\",item.goodsid).append(\"×\");\n\n            var deleteCart = $(\"<td></td>\").addClass(\"product-remove product-remove_2\")\n                .append(delA);\n\n            delA.click(function () {\n                deleteCartGoods(item.goodsid);\n            });\n\n            var shopimage = $(\"<td></td>\").addClass(\"product-thumbnail product-thumbnail-2\")\n                .append($(\"<a></a>\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid)\n                    .append($(\"<img/>\").attr(\"src\",\"/pictures/\"+item.imagePaths[0].path)));\n\n            var goodsname = $(\"<td></td>\").addClass(\"product-name product-name_2\")\n                .append($(\"<a></a>\").attr(\"href\",\"/shop/detail?goodsid=\"+item.goodsid).append(item.goodsname));\n\n            var goodsprice = $(\"<td></td>\").addClass(\"product-price\")\n                .append($(\"<span></span>\").addClass(\"amount-list amount-list-2\").append(\"￥\"+item.price));\n\n            var numIput = $(\"<input/>\").addClass(\"num\").attr(\"type\",\"number\").attr(\"value\",item.num);\n\n            var num = $(\"<td></td>\").addClass(\"product-stock-status\")\n                .append($(\"<div></div>\").addClass(\"latest_es_from_2\")\n                    .append(numIput));\n\n            numIput.change(function () {\n               updateCart(item.goodsid,$(this).val());\n            });\n\n            var totalPrice = $(\"<td></td>\").addClass(\"product-price\")\n                .append($(\"<span></span>\").addClass(\"amount-list amount-list-2\").append(\"￥\"+item.price*item.num));\n\n            var goodsitem = $(\"<tr></tr>\").append(deleteCart)\n                .append(shopimage)\n                .append(goodsname)\n                .append(goodsprice)\n                .append(num)\n                .append(totalPrice)\n                .appendTo(\"#cart-table tbody\");\n            totalnum++;\n            totalMoney = totalMoney + item.price*item.num;\n        });\n    }\n\n    //小计\n    $(\"#total-num\").text(totalnum);\n    $(\"#total-price\").text(\"￥\"+totalMoney);\n}\n"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/sort.js",
    "content": "$(document).ready(function(){\n    // $(\".data-item-li\").children(\"div\").addClass(\"to-big\");\n\t//分类栏隐藏显示\n\t$(\".list-group-item\").hover(function(){\n\t\t$(this).children(\"div.sort-detail\").show();\n\t},function(){\n\t\t$(this).children(\"div.sort-detail\").delay(1).hide(0);\n\t\t// $(this).children(\"div.sort-detail\").hide(10);\n\t});\n\n\t//幻灯片左右控制器\n\t$(\"#mycarousel\").hover(function(){\n\t\t$(this).children(\".carousel-control\").show();\n\t},function(){\n\t\t$(this).children(\".carousel-control\").hide();\n\t});\n\n\t//收藏按钮\n\t$(\".data-item-li\").hover(function(){\n\t\t//需处理显示哪个按钮\n\t\t// $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n\t\t$(this).find(\".like-button\").show();\n\t},function(){\n\t\t$(this).find(\".like-button\").hide();\n\t});\n\t\n\t$(\".info-a\").hover(function(){\n\t\t//需处理显示哪个按钮\n\t\t// $(this).find(\".like-button\").css(\"display\",\"inline-block\");\n\t\t$(this).find(\".dropdown-menu\").show();\n\t},function(){\n\t\t$(this).find(\".dropdown-menu\").hide();\n\t});\n\n\t$('.like-button').click(function(){\n\t\t//$(this).removeClass(\"glyphicon-heart-empty\");\n        var goodsId = $(this).attr('data-id');\n        var isChangeBtn = true;\n        if(!$(this).hasClass('glyphicon-heart')) {\n            //收藏\n            $.ajax({\n                url:\"/shop/collect\",\n                type:\"POST\",\n                data:{\n                    goodsid:goodsId\n                },\n                success:function (result) {\n                    //收藏成功\n                    if(result.code === 200){\n                        location.href = \"/shop/login\";\n                        isChangeBtn = false;\n                    }\n                },\n                error:function () {\n                    alert(\"收藏失败\");\n                }\n            })\n        } else {\n            //取消收藏\n            $.ajax({\n                url:\"/shop/deleteCollect\",\n                type:\"POST\",\n                data:{\n                    goodsid:goodsId\n                },\n                success:function (result) {\n                    //取消收藏成功\n                    if(result.code === 200){\n                        location.href = \"/shop/login\";\n                        isChangeBtn = false;\n                    }\n                },\n                error:function () {\n                    alert(\"取消收藏失败\");\n                }\n            })\n        }\n\n\t\t/*$.post(\"servlet/CollectServlet\", {\n\t\t\tgoodsId: goodsId,\n\t\t\t});\n\t\t// alert(\"商品已加入购物车！\");*/\n\n\t\tif(isChangeBtn) {\n            $(this).toggleClass(\"glyphicon-heart glyphicon-heart-empty\");\n        }\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/templatemo-script.js",
    "content": "/*\n *\twww.templatemo.com\n *******************************************************/\n\n/* HTML document is loaded. DOM is ready. \n-----------------------------------------*/\n$(document).ready(function(){\n\n\t/* Mobile menu */\n\t$('.mobile-menu-icon').click(function(){\n\t\t$('.templatemo-left-nav').slideToggle();\t\t\t\t\n\t});\n\n\t/* Close the widget when clicked on close button */\n\t$('.templatemo-content-widget .fa-times').click(function(){\n\t\t$(this).parent().slideUp(function(){\n\t\t\t$(this).hide();\n\t\t});\n\t});\n});"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/userManage.js",
    "content": "/**\n * Created by 文辉 on 2017/7/23.\n */\n$(document).ready(function () {\n\n    var path = $(\"#path\").text();\n\n    var currentPage = 1;\n\n    to_page(path, 1);\n\n\n});\n\n$(document).on(\"click\",\".templatemo-delete-btn\",function () {\n    var goodsname = $(this).parents(\"tr\").find(\"td:eq(1)\").text();\n    var goodsid = $(this).parents(\"tr\").find(\"td:eq(0)\").text();\n    swal({\n            title: \"确定删除\" + goodsname + \"吗？\",\n            type: \"warning\",\n            showCancelButton: true,\n            cancelButtonText:\"取消\",\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"确定删除！\",\n            closeOnConfirm: false,\n        },\n        function () {\n            /*swal(\"删除！\", \"你的虚拟文件已经被删除。\", \"success\");*/\n            $.ajax({\n                url: \"/shop/admin/user/delete/\" + goodsid,\n                type: \"DELETE\",\n                success:function (result) {\n                    swal(result.msg, \"\",\"success\");\n                    to_page('/shop',currentPage);\n                },\n                error:function () {\n                    /*to_page('/shop',currentPage);*/\n                }\n            });\n        });\n});\n\nfunction to_page(path, page) {\n    $.ajax({\n        url: path + \"/admin/user/showjson\",\n        data: \"page=\" + page,\n        type: \"get\",\n        success: function (result) {\n\n            //解析显示\n            build_user_table(path, result);\n\n            //页面信息\n            build_page_info(path, result);\n\n            //分页\n            build_page_nav(path, result);\n\n            currentPage = page;\n        }\n    });\n}\n\nfunction build_user_table(path,result) {\n    $(\"#goodsinfo tbody\").empty();\n    var goods = result.info.pageInfo.list;\n    $.each(goods, function (index,item) {\n        var userid = $(\"<td></td>\").append(item.userid);\n        var username = $(\"<td></td>\").append(item.username);\n        var email = $(\"<td></td>\").append(item.email);\n        var telephone = $(\"<td></td>\").append(item.telephone);\n\n        var deleteBtn = $(\"<button></button>\").addClass(\"templatemo-delete-btn\").append(\"删除\");\n\n        var deleteTd = $(\"<td></td>\").append(deleteBtn);\n\n\n        $(\"<tr></tr>\").append(userid)\n            .append(username)\n            .append(email)\n            .append(telephone)\n            .append(deleteTd).appendTo(\"#goodsinfo tbody\");\n    })\n}\n\nfunction build_page_info(path,result) {\n    $(\"#page-info-area\").empty();\n    $(\"#page-info-area\").append(\"当前第\"+ result.info.pageInfo.pageNum +\"页，总共\"+ result.info.pageInfo.pages +\"页，总共\"+ result.info.pageInfo.total +\"记录\")\n}\n\nfunction build_page_nav(path,result) {\n    $(\"#page-div-nav ul\").empty();\n    var pageUl = $(\"<ul></ul>\").addClass(\"pagination\")\n\n    var firstPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"首页\")));\n\n    var prePage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-backward\\\"></i></span>\")));\n\n    if(!result.info.pageInfo.hasPreviousPage) {\n        prePage.addClass(\"li-none\");\n    } else {\n        prePage.click(function () {\n            to_page('/shop',result.info.pageInfo.prePage);\n        });\n    }\n\n    //跳转\n    firstPage.click(function () {\n        to_page('/shop',1);\n    });\n\n    var nextPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-forward\\\"></i></span>\")));\n\n    var lastPage = $(\"<li></li>\").append($(\"<a aria-label=\\\"Next\\\"></a>\")\n        .append($(\"<span aria-hidden=\\\"true\\\"></span>\")\n            .append(\"末页\")));\n\n    if(!result.info.pageInfo.hasNextPage) {\n        nextPage.addClass(\"li-none\");\n    } else {\n        nextPage.click(function () {\n            to_page('/shop',result.info.pageInfo.nextPage);\n        });\n    }\n\n    lastPage.click(function () {\n        to_page('/shop',result.info.pageInfo.lastPage);\n    });\n\n    pageUl.append(firstPage).append(prePage);\n\n    $.each(result.info.pageInfo.navigatepageNums,function (index,item) {\n        var numLi = $(\"<li></li>\").append($(\"<a></a>\")\n            .append($(\"<span aria-hidden=\\\"true\\\"></span>\").append(item)));\n        if(result.info.pageInfo.pageNum === item) {\n            numLi.addClass(\"active\");\n        }\n        numLi.click(function () {\n            to_page('/shop',item);\n        });\n        pageUl.append(numLi);\n    });\n\n    pageUl.append(nextPage).append(lastPage).appendTo(\"#page-div-nav\");\n}"
  },
  {
    "path": "ssmschoolshop/target/ssmschoolshop/js/validate.js",
    "content": "\n$.validator.setDefaults({\n\tsubmitHandler: function() {\n\t\tform.submit();\n\t}\n});\n$(document).ready(function() {\n\t$('#form').validate({\n\t\trules: {\n\t\t\tusername: \"required\",\n            telephone: {\n\t\t\t\trequired: true,\n\t\t\t},\n            email: {\n\t\t\t\trequired: true,\n\t\t\t\temail: true,\n\t\t\t},\n            password: {\n\t\t\t\trequired: true,\n\t\t\t\tminlength: 8,\n\t\t\t},\n\t\t\tconfirmPassword: {\n\t\t\t\trequired: true,\n\t\t\t\tminlength: 8,\n\t\t\t\tequalTo: \"#password\",\n\t\t\t}\n\t\t},\n\t\tmessages: {\n            username: \"用户名不能为空\",\n            telephone: \"联系电话不能为空\",\n            email: {\n\t\t\t\trequired: \"邮箱输入不能为空\",\n\t\t\t\temail: \"请输入一个正确的邮箱\",\n\t\t\t},\n            password: {\n\t\t\t\trequired: \"密码输入不能为空\",\n\t\t\t\tminlength: \"密码长度不能小于8位\",\n\t\t\t},\n\t\t\tconfirmPassword: {\n\t\t\t\trequired: \"输入不能为空\",\n\t\t\t\tminlength: \"密码长度不能小于8位\",\n\t\t\t\tequalTo: \"两次密码输入不一致\",\n\t\t\t}\n\t\t}\n\t});\n});"
  },
  {
    "path": "新建文本文档.txt",
    "content": ""
  }
]